多くのCocoaPodとネイティブiOSライブラリでは、セットアップやカスタマイズを行う手段としてまたはCustomClassDataSource
のいずれかのプロトコルを使用しています。私は、このプログラミングモデルをいつ使うべきかと思っていました。なぜなら、これで多くのことをプロパティで達成できるように思えるからです。iOS:デリゲート/データソース(プロトコル)とプロパティを使用する場合
例
私はSmurfLabel
を持ってSmurfViewController
というカスタムクラスを定義する場合、私有財産としてsmurfLabel
を格納し、このようになりますsmurf
と呼ばれる公共計算性質を持つためのより良い習慣です:
private var smurfLabel = UILabel()
public var smurf: String {
get {
return smurfLabel.text
}
set(text) {
smurfLabel.text = text
}
}
かは、私はこのようになります公共の機能を持っているSmurfDataSource
を定義する必要があります。
func textForSmurfLabel() -> String {
return "smurfText"
}
ここで何を使用すればよいですか?
プロパティを使用して同じ結果を得ることはできません。私が知る限り、プロトコルは、特定のアクションが完了したときに他のクラスに通知するためにユーザーが使用するカスタムデリゲートメソッドです。 –
デリゲートの代わりにコールバックを使用できます。実際それは励まされます。ニースチュートリアル:https://medium.cobeisfresh.com/why-you-shouldn-t-use-delegates-in-swift-7ef808a7f16b#.erlmejwjo – Siriss
ここでのコメント/回答に暗黙のうちに、delegate-protocolパターンは1つのクラスはあるイベントを別のクラスに通知します。通常、デリゲートを検討するときは、デリゲートプロトコルのパターンと、コールバッククロージャ、通知、オブザーバなどの他の通知パターンを比較します。プロパティ自体は、外部オブジェクトに状態の照会を許可するように設計されたものです。いくつかのオブジェクトが、いくつかの状態変更の積極的な通知のためではありません。 – Rob