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

10-07 13:12