包含尖括号<>的奇数属性声明语法

ima*_*145 8 objective-c ios

我刚从2015 WWDC示例代码(https://developer.apple.com/sample-code/wwdc/2015/)下载了FourInARow,并注意到文件中有一个奇怪的属性声明AAPLViewController.m

@property NSArray<NSMutableArray<CAShapeLayer *> *> *chipLayers;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

Mic*_*uba 12

它是Objective-C的新成员,称为Lightweight Generics.它是在iOS9/OS X 10.11中引入的,目的是增强Swift和Objective-C之间的互操作性.正如文件所说:

使用轻量级泛型参数化的NSArray,NSSet和NSDictionary类型的Objective-C声明由Swift导入,其中包含有关其内容类型的信息.

例如,请考虑以下Objective-C属性声明:

@property NSArray<NSDate *>* dates; 
@property NSSet<NSString *>* words; 
@property NSDictionary<KeyType: NSURL *, NSData *>* cachedData;
Run Code Online (Sandbox Code Playgroud)

以下是Swift如何导入它们:

var dates: [NSDate]
var words: Set<String> 
var cachedData: [NSURL: NSData]
Run Code Online (Sandbox Code Playgroud)