RACSequenceAdditions
在 ReactiveCocoa 框架中,为了方便获取由集合对象创建的 RACSequence 实例对象,而扩展了名为 RACSequenceAdditions 的分类。
扩展了分类的相关类如下:
- NSArray
- NSDictionary
- NSEnumerator
- NSIndexSet
- NSOrderSet
- NSSet
- NSString
这些类的扩展类大致相同,但也有区别。
它们都有一个属性 rac_sequence
,通过该属性可以获取一个 RACSequence 类型的实例对象,但是在不同分类中,该属性获取方法的实现方式是不同的。
-
NSArray (RACSequenceAdditions)
- (RACSequence *)rac_sequence { return [RACArraySequence sequenceWithArray:self offset:0]; }
-
NSDictionary (RACSequenceAdditions)
- (RACSequence *)rac_sequence { NSDictionary *immutableDict = [self copy]; return [immutableDict.allKeys.rac_sequence map:^(id key) { id value = immutableDict[key]; return RACTuplePack(key, value); }]; } - (RACSequence *)rac_keySequence { return self.allKeys.rac_sequence; } - (RACSequence *)rac_valueSequence { return self.allValues.rac_sequence; }
这个分类中,还有分别获取键、值集合的队列信号流的属性 rac_keySequence 和 rac_valueSequence 。
-
NSEnumerator (RACSequenceAdditions)
- (RACSequence *)rac_sequence { return [RACSequence sequenceWithHeadBlock:^{ return [self nextObject]; } tailBlock:^{ return self.rac_sequence; }]; }
-
NSIndexSet (RACSequenceAdditions)
- (RACSequence *)rac_sequence { return [RACIndexSetSequence sequenceWithIndexSet:self]; }
-
NSOrderedSet (RACSequenceAdditions)
- (RACSequence *)rac_sequence { return self.array.rac_sequence; }
-
NSSet (RACSequenceAdditions)
- (RACSequence *)rac_sequence { return self.allObjects.rac_sequence; }
-
NSString (RACSequenceAdditions)
- (RACSequence *)rac_sequence { return [RACStringSequence sequenceWithString:self offset:0]; }