以协议作为参数的ObjC泛型集合转换为[AnyObject]

时间:2015-09-17 19:18:17

标签: objective-c swift generics language-interoperability

为什么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]

1 个答案:

答案 0 :(得分:8)

P不是Objective-C中的类型。对于符合协议id<P>的任何内容,P是Objective-C类型。 (NSObject<P> *NSObject 的实例的任何类型,符合协议P,这种情况略有不同。)

所以写它的最好方法是:

@property NSArray<id<P>> *protocols;