我有这个代码在Swift 2中正常工作.
extension PHFetchResult: Sequence {
public func makeIterator() -> NSFastEnumerationIterator {
return NSFastEnumerationIterator(self)
}
}
Run Code Online (Sandbox Code Playgroud)
自从我升级到Swift 3
泛型Objective-C类的扩展无法在运行时访问类的泛型参数
我不知道如何解决这个问题.任何帮助深表感谢!
我试图迭代CMSensorDataList返回的类对象CMSensorRecorder.accelerometerData(from:to:).该课程确认了NSFastEnumeration协议.所以我尝试了/sf/answers/1811109401/中提到的技巧.但是,由于我使用的是Xcode Version 8.0 beta(8S128d),它不再有效.
我该怎么做才能使它支持for-in循环?
我有:
NSDictionary* server;
for (server in self.servers)
{
if (<some criterium>)
{
break;
}
}
// If the criterium was never true, I want to use the last item in the
// the array. But turns out that `server` is `nil`.
Run Code Online (Sandbox Code Playgroud)
循环块永远不会改变server.
servers是一个NSMutableArray词典,一个在循环中没有改变的属性.
为什么循环结束后server有值nil?
这是我第一次在循环后使用这样的变量.没有想太多,我认为它会像(在旧的C天)一样工作:
int i;
for (i = 0; i < n; i++)
{
...
}
Run Code Online (Sandbox Code Playgroud) cocoa objective-c nsdictionary fast-enumeration nsfastenumeration
我想用
for (TBL_CardView *cardView in cardsInHand)
{
// <#statements#>
}
Run Code Online (Sandbox Code Playgroud)
TBL_CardView是我的自定义类,而且cardsInHand只是(TBL_CardViewArray*)
所以我需要countByEnumeratingWithState:objects:count:为我的TBL_CardViewArray班级实施.
它是否正确 ?
这是我的TBL_CardViewArray.h
/**
* Keep TBL_CardView in array
*/
@interface TBL_CardViewArray : NSObject
- (TBL_CardView *)drawCard;
- (void)addCard:(TBL_CardView *)card;
- (NSUInteger)cardsRemaining;
- (NSArray*) cardViewArray;
- (TBL_CardView *)drawRandomCard;
@end
Run Code Online (Sandbox Code Playgroud)
来自TBL_CardViewArray.m的一些重要部分
@implementation TBL_CardViewArray
{
NSMutableArray *_cards;
}
Run Code Online (Sandbox Code Playgroud)
所以我只是使用TBL_CardViewArrayNSMutableArray的包装来存储我的TBL_CardView类.
问题
如何实现countByEnumeratingWithState:objects:count:用于我的TBL_CardViewArray类.
我确实谷歌它,但没有找到一些我可以轻松重用的例子.
我的假设是因为我已经在使用NSMutableArray存储它并不是那么复杂,但我无法弄清楚如何?
我正在阅读关于枚举的NSHipster文章,该文章声称for-in循环比以下更快enumerateObjectsUsingBlock::
除非你在迭代时实际需要数字索引,否则使用for/in NSFastEnumeration循环几乎总是更快.
这个答案为该引用提供了一些反驳:
快速枚举需要从内部表示转换为快速枚举的表示.其中有开销.基于块的枚举允许集合类以最快遍历本机存储格式的速度枚举内容.
从内部表示转移到快速枚举的表示的翻译过程是什么?我知道那里有一些开销,但多少钱?