以协议为参数的 ObjC 泛型集合被翻译为 [AnyObject]
ObjC generic collection with protocol as parameter is translated as [AnyObject]
为什么protocols
属性在swift中翻译成[AnyObject],而不是[P]
@protocol P;
@class C;
@interface TestGenerics: NSObject
@property NSArray<C*>* classes;
@property NSArray<P>* protocols;
@end
在 Swift 中看起来是这样的:
public class TestGenerics : NSObject {
public var classes: [C]
public var protocols: [AnyObject]
}
更新:找到解决方案
@property NSArray<NSObject<P>*>* protocols;
或喜欢建议newacct
@property NSArray<id<P>>* protocols;
翻译成:
public var protocols: [P]
P
不是 Objective-C 中的类型。 id<P>
是任何符合协议 P
的 Objective-C 类型。 (NSObject<P> *
是 NSObject
和 的实例的任何类型,符合协议 P
,这是略有不同的条件。)
所以最好的写法是:
@property NSArray<id<P>> *protocols;
为什么protocols
属性在swift中翻译成[AnyObject],而不是[P]
@protocol P;
@class C;
@interface TestGenerics: NSObject
@property NSArray<C*>* classes;
@property NSArray<P>* protocols;
@end
在 Swift 中看起来是这样的:
public class TestGenerics : NSObject {
public var classes: [C]
public var protocols: [AnyObject]
}
更新:找到解决方案
@property NSArray<NSObject<P>*>* protocols;
或喜欢建议newacct
@property NSArray<id<P>>* protocols;
翻译成:
public var protocols: [P]
P
不是 Objective-C 中的类型。 id<P>
是任何符合协议 P
的 Objective-C 类型。 (NSObject<P> *
是 NSObject
和 的实例的任何类型,符合协议 P
,这是略有不同的条件。)
所以最好的写法是:
@property NSArray<id<P>> *protocols;