原文: http://petersteinberger.com/blog/2012/using-subscripting-with-Xcode-4_4-and-iOS-4_3/
Xcode 4.4 GM 版本发布,你可以在 4.4 中使用新的“下标”语法。苹果将在新的OSX 和 iOS 版本中引入这个特性,但还得等等。下列代码段摘自 PSPDFKit,它使你现在就能使用这个特性:
// Add support for subscripting to theiOS 5 SDK.
#if __IPHONE_OS_VERSION_MAX_ALLOWED< 60000
@interface NSObject(PSPDFSubscriptingSupport)
-(id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)objatIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)objforKeyedSubscript:(id <NSCopying>)key;
- (id)objectForKeyedSubscript:(id)key;
@end
#endif
这种处理过于简单了,无论你在任何对象上调用下标语法,Xcode 都不会报错。但你忍不住会问,这样行不行啊?当然,这只是临时的措施,仅仅是为了通过Xcode 4.4 的编译。
在 Xcode 4.5 中,这段代码没有任何意义,因为新的 SDK 已经定义了这些方法。确保在全局头文件(例如.pch文件)中引用这些代码。
注意,这不同于枚举。枚举已经是一种真正的语法糖,枚举已经内置在 Xcode4.4+(LLVM 4.0+)中。下标实际上是调用了新的方法。那么这段特殊的代码(只有方法定义,没有实现)是怎么起作用的?
感谢 Mike Ash 和Cédric Luthi 的解释:
实际上,下标索引已经包含在 ARCLite 中了。ARCLite 的load 函数用 class_addMethod 动态地加了 4 个方法。在这些方法的实现中,实际上是简单地调用了非下标方法而已。
// objectAtIndexedSubscript: method isimplemented like this:
id__arclite_objectAtIndexedSubscript(NSArray *self, SEL _cmd, NSUInteger idx)
{
return [self objectAtIndex:idx];
}
如果你因为某些原因,不能使用 ARC,你只想强制让编译器连接到libarclite,那么可以使用
-fobjc-arc连接标志。这将可在 iOS4.3 中生效。
最好,下载新的 Xcode Refactoring Assistant 将你的代码转换为最新的O-C 代码。