1. ホーム
  2. swift

[解決済み] 純粋な」Swift で弱いプロトコル参照を作るには (@objc なしで) どうしたらいいですか?

2022-03-16 09:46:53

質問

weak の参照がSwiftで動作しないようです。 protocol として宣言されています。 @objc これは、純粋なSwiftアプリには必要ありません。

このコードではコンパイルエラーになります ( weak は、非クラス型に適用することはできません。 MyClassDelegate ):

class MyClass {
  weak var delegate: MyClassDelegate?
}

protocol MyClassDelegate {
}

プロトコルの前に @objc と入力すると、正常に動作します。

質問です。を達成するための「純粋な」Swiftの方法は何ですか? weak delegate ?

解決方法は?

プロトコルの型を AnyObject .

protocol ProtocolNameDelegate: AnyObject {
    // Protocol stuff goes here
}

class SomeClass {
    weak var delegate: ProtocolNameDelegate?
}

使用方法 AnyObject は、クラスのみがこのプロトコルに準拠でき、構造体や列挙型は準拠できないことを表しています。