以协议为参数的 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;