サンプルの遊び場でテストされ、作業しています。
import UIKit
protocol MyDelegate {
func delegatedFunction(a: String)
}
class DelegatorClass {
var delegate: MyDelegate?
func callDelegate() {
delegate?.delegatedFunction("Hello World!")
}
}
class DelegateClass: MyDelegate {
let my_class = DelegatorClass()
init() {
my_class.delegate = self
}
// MyDelegate Protocol implementation
func delegatedFunction(a: String) {
print(a)
}
}
次の行を追加してください。
let c = DelegateClass()
c.my_class.callDelegate()
説明するために、あなたはDelegateClass c
のインスタンスを作成し、それが初期化されている
は、init
方法が実行されます。 DelegatorClassインスタンスmy_class
メンバーdelegate
には、DelegateClassであるself
への参照が保持されるようになりました。今
callDelegate()
方法が実行される、オプションの変数delegate
は現在DelegateClassインスタンスへの参照を保持しているので、それは基本的にdelegatedFunction(a: String)
メソッドの実行を要求します。したがって、文字列a
が印刷されます。
my_class.delegate = self
をinit()
の中に入れなければならない理由は、クラス内のメソッドの外にインスタンスプロパティ宣言を持つことができるからです。すべての機能はメソッドの中に入れなければなりません。
説明が明確になることを願っています! :)
で
delegate
プロパティにself
を割り当てるので、重要性、それに対してプロトコル機能を呼び出すことができるようにclass DelegatorClass
で、delegate
プロパティは、protocol MyDelegate
のタイプのオブジェクトを割り当てることが期待されます呼び出しを続行する前に、変数 "delegate"をDelegateClassに関連付けます。この場合、ランタイムエラーであるnil値以上の関数を呼び出すことになります。 – kandelvijaya委任は、オブジェクトのインタフェースベースの構成に似ています。これは、オブジェクトと責任を切り離す方法です。デザインパターンでヘッドファーストの最初の3つの章を読んでいただければ幸いです。 – kandelvijaya