4

protocolsプロパティが [P] ではなく [AnyObject] として迅速に変換される理由

@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]
4

1 に答える 1

9

PObjective-C の型ではありません。id<P>protocol に準拠するものすべての Objective-C 型 type ですP。(NSObject<P> *は、 protocol のインスタンスでNSObject あり、プロトコルに準拠するものの型ですP。これは、わずかに異なる条件です。)

したがって、それを書く最良の方法は次のようになります。

@property NSArray<id<P>> *protocols;
于 2015-09-18T00:45:03.473 に答える