为什么protocols
属性在swift中转换为[任何对象],而不是[p]
@protocol P;
@class C;
@interface TestGenerics: NSObject
@property NSArray<C*>* classes;
@property NSArray<P>* protocols;
@end
它看起来很快:
public class TestGenerics : NSObject {
public var classes: [C]
public var protocols: [AnyObject]
}
更新:找到解决方案
@property NSArray<NSObject<P>*>* protocols;
或者像建议的纽阿克特
@property NSArray<id<P>>* protocols;
转换为:
public var protocols: [P]
最佳答案
P
不是objective-c中的类型。id<P>
是符合协议的任何对象的objective-c类型。(P
是任何一种类型,它是NSObject<P> *
的实例,并且符合协议NSObject
,条件略有不同。)
所以最好的写法是:
@property NSArray<id<P>> *protocols;