#・Delegateとは?
Swiftにおけるイベント通知パターンの一つである。あるオブジェクトの処理を別のオブジェクトに代替させる。
##・Delegateのイベント通知から処理の流れは大まかに、以下のようになっている
####①イベントの発生を検知
処理を任せる側がユーザーからの画面のタッチなどのイベントを検知し、処理を任せられる側(委譲先)に通知する。
####②イベント発生後にしたい処理
処理を任せる側(委譲元)から送られてきた通知から、処理を任せられる側(委譲先)が具体的な処理を行う。
#・処理を任せる側(委譲元)で行うこと
処理を任せる相手を保持するプロパティを持つ
#・処理を任せられる側(委譲先)で行うこと
①委譲先においてprotocolを準拠
②委譲先の指定
③必須の関数(デリゲートメソッド)の記述
#・具体例
・プロトコルの実装
protocol SomeDelegate : class {
func sayHello()
}
・処理を任せる側の実装
final class Person {
// 委譲先を保持するプロパティ
weak var delegate : SomeDelegate?
func say() {
delegate?.sayHello()
}
}
・処理を任せられる側の実装
final class Okadai {
}
//extensionでデリゲートメソッドを記述
extension Okadai : SomeDelegate {
func sayHello() {
print("Hello, I'm Okadai")
}
}
・デリゲートをセットして、実行する
import UIKit
final class InitialViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let person = Person()
let okadai = Okadai()
// 処理を任せる相手(委譲先)をokadaiに指定する
person.delegate = okadai
person.say() // "Hello, I'm Okadai"
}
}