我最近在Apple工程师的WWDC视频中看到了一些示例代码。他正在使用NSArray
的{{1}}方法,但是我注意到块的第一个参数不是{I},因为我习惯了,但是已经改为具体类型了开发人员知道是在阵列中。
例如,我只是在Xcode中使用了一切,一切正常:
enumerateObjectsUsingBlock:
id
的声明声明第一个块参数为NSArray *test = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
[test enumerateObjectsUsingBlock:^(NSString *aString, NSUInteger idx, BOOL *stop) {
// ...
}];
类型:
enumerateObjectsUsingBlock:
现在我明白id
可以用来代表任何Objective-c类型,但这个带参数的小技巧对我来说是未知的。
该语言的此功能是否有任何文档?这可以用在你也有- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
参数的常规方法中吗?这是否安全或完全支持?
答案 0 :(得分:1)
这是关于id
类型的link to apple doc。
这个技巧可以在任何发送id的方法中使用,只要你对某个类型确定,或者在使用它之前检查它,它就是安全的。
答案 1 :(得分:0)
非常等于:
[test enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *aString = (NSString*)obj;
// ...
}];
请注意,在快速枚举的for循环中存在明确的并行:
for (id obj in test) {
NSString *aString = (NSString*)obj;
// ...
}
VS
for (NSString *aString in test) {
// ...
}
但没有指向文档的链接 - 抱歉!