public protocol Subscriber : class {
}
public struct Subscription {
private weak var subscriber:AnyObject<Subscriber>? = nil
}
このvarのプロトコルではAnyObject
を使用できないのはなぜですか?特別なジェネリック型ではないAnyObject
public protocol Subscriber : class {
}
public struct Subscription {
private weak var subscriber:AnyObject<Subscriber>? = nil
}
このvarのプロトコルではAnyObject
を使用できないのはなぜですか?特別なジェネリック型ではないAnyObject
をSwiftでは、Objective-Cと同じように型とプロトコルを組み合わせることはできませんが、プロトコルの組み合わせを指定することはできます。 AnyObject
は、実際にはプロトコルであり、あなたが書くことによって、あなたが上記の表現したいものを達成することができますので:
public struct Subscription {
private weak var subscriber:protocol<Subscriber, AnyObject>? = nil
}
これはSubscriber
とAnyObject
プロトコルの両方に準拠するようにsubscriber
が必要です。あなたは本質的に任意の適合タイプもAnyObject
であることを保証Subscriber
プロトコルclass
プロトコルを作ったので、あなたの場合は
は、上記の、あなたが実際にAnyObject
一部を必要としません。だから、あなただけ書くことができる:
public struct Subscription {
private weak var subscriber:Subscriber? = nil
}
しかしprotocol<Subscriber, AnyObject>
アプローチをSubscriber
を実装するクラスの種類に制限、特定subscriber
弱いVARをしながら、あなたの加入者プロトコルは、唯一のクラスの種類に限定されるものではないことができるでしょう。
プロトコルに準拠したオブジェクトを参照するには、プロトコルを使用します。スウィフトはあなたがid<SomeProtocol>
を指定する必要がObjective-Cのようにされていません。
public struct Subscription {
private weak var subscriber: Subscriber? = nil
}
あなたはむしろclass
を使用するよりも、AnyObject
に使用を制限したい場合も、このようなあなたのプロトコルを宣言することができます。
public protocol Subscriber : AnyObject {
// ...
}