Igo*_*uta 3 generics objective-c language-interoperability swift
为什么protocols属性在swift中被翻译为[AnyObject],而不是[P]
@protocol P;
@class C;
@interface TestGenerics: NSObject
@property NSArray<C*>* classes;
@property NSArray<P>* protocols;
@end
Run Code Online (Sandbox Code Playgroud)
在Swift中它看起来像这样:
public class TestGenerics : NSObject {
public var classes: [C]
public var protocols: [AnyObject]
}
Run Code Online (Sandbox Code Playgroud)
更新:找到解决方案
@property NSArray<NSObject<P>*>* protocols;
Run Code Online (Sandbox Code Playgroud)
或者像建议的newacct
@property NSArray<id<P>>* protocols;
Run Code Online (Sandbox Code Playgroud)
被翻译成:
public var protocols: [P]
Run Code Online (Sandbox Code Playgroud)
P不是Objective-C中的类型.id<P>对于符合协议的任何内容,都是Objective-C类型P.(NSObject<P> *是一个类型,适用于协议的实例NSObject 并符合协议P,条件略有不同.)
所以写它的最好方法是:
@property NSArray<id<P>> *protocols;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |