weak
protocol
が として宣言されていない限り、Swift では参照が機能しないようですが@objc
、これは純粋な Swift アプリでは望ましくありません。
このコードはコンパイル エラーになります (weak
非クラス型には適用できませんMyClassDelegate
)。
class MyClass {
weak var delegate: MyClassDelegate?
}
protocol MyClassDelegate {
}
プロトコルの前に を付ける@objc
と動作します。
質問: を達成するための「純粋な」Swift の方法は何ですかweak
delegate
?
ベストアンサー1
プロトコルのタイプを として宣言する必要がありますAnyObject
。
protocol ProtocolNameDelegate: AnyObject {
// Protocol stuff goes here
}
class SomeClass {
weak var delegate: ProtocolNameDelegate?
}
を使用するとAnyObject
、クラスのみがこのプロトコルに準拠でき、構造体や列挙型は準拠できないと述べます。