デリゲートが実際にどのように動作するかを知るためには、最初に独自のカスタムデリゲートを作成する必要があります。その方法では、魔法がないことがわかります。おそらく実際のリンゴの実装を見ることはできませんデリゲートメソッドで構築しますが、私はそれらに実装された多くのロジックがあることを保証しますが、それはプライバシーの理由から利用できません。カスタムデリゲートのは、例えばとしましょう...
を作成すると あなたは、クラスAがあり、このクラスでは、あなたがこのようなデリゲートプロパティを持っている。このクラスではプロトコル
protocol ClassADelegate: class {
func changeBackgroundColor(_ color: UIColor?)
}
を作成することから始め。
weak var delegate: ClassADelegate?
はのは、このクラスでのViewControllerであり、あなたはUIbuttonようにそれにIBACtionを持っており、あなたの目標は、あなたがそのボタンをタップしたときにアプリ内の別のViewControllerが青にその背景色を変更することであるとしましょう。あなたがこれを行うクラスAで、このアクション...
func someAction() {
delegate?.changeBackgroundColor(.blue)
}
の内部では、 は、あなたがのUITableViewを使用して、デリゲートに考えている場合は、「魔法」のUITableViewはクラスであることを考える方法により、クラスAに、ここで起こることを言ってみましょうA.
これで色を変更したいクラスBがあります。 まあ今クラスBはあなたにもプロトコルに準拠同じように、このようなプロトコルに準拠する必要がUITableViewDelegateなど
class ClassB: UIViewController, ClassADelegate {
}
今秒間ワードデリゲートを考えると、それは、あなただけであることを意味するものだと思います責任を他の人に委任していますよね?はい、この場合、ClassBはdelegateプロパティにアクセスするためにClass BのクラスAのインスタンスを持つ必要があるため、ClassBは委譲されます。
let classa = ClassA()
classa.delegate = self
最後の手順は、このようなプロトコルのメソッドを呼び出すことです。
func changeBackgroundColor(_ color: UIColor?) {
view.backgroundColor = color
}
ヨーヨーがあなたのクラスでこのメソッドを参照してくださいしかし、あなたは、プロトコルの実装へのアクセスを持っていない場合、あなたは「ここで、この魔法の色から来ない?」を自問します締結しますしかし、あなたが見たように、プロトコルが属する別のクラスからのものであり、これが役立つことを望みます。
デリゲートの仕組みを説明する数千のチュートリアルがあります。ランダムな説明の1つが利用可能です。 [ここ](https://www.natashatherobot.com/explaining-ios-delegates-a-story-about-your-morning-coffee/)。 – holex