見出し画像

swiftのdelegateって?

URLhttps://stackoverflow.com/questions/24099230/delegates-in-swift

こんばんわ、今晩もぽっ活していきます。
今回はdelegateについてのスタックオーバーフローを訳して行きます。

● 質問

delegateをどのように実装しますか?NSUserNotificationCenterDelegate のようなものですか?

● 答え

※ 評価が一番多いやつ
このようにViewController間で少し助けるような働きをします。

step 1: データを削除したり送ったりするようなViewControllerにprotocolを記述します。

protocol FooTwoViewControllerDelegate:class {
func myVCDidFinish(_ controller: FooTwoViewController, text: String)
}

step 2: データを送る側のクラスにdelegateを宣言します。(例: UIViewController)

class FooTwoViewController: UIViewController {
weak var delegate: FooTwoViewControllerDelegate?
[snip...]
}

step3: 送りたいデータに対するprotocolメソッドを採用し引数にデータを割り当てる。

@IBAction func saveColor(_ sender: UIBarButtonItem) {
delegate?.myVCDidFinish(self, text: colorLabel.text) //assuming the delegate is assigned otherwise error
}

step4: データを受け取りたいクラスはprotocolを準拠する。

class ViewController: UIViewController, FooTwoViewControllerDelegate {

step5: delegateメソッドを実装する

func myVCDidFinish(_ controller: FooTwoViewController, text: String) {
colorLabel.text = "The Color is " + text
controller.navigationController.popViewController(animated: true)
}

step6: セグエする際にViewControllerのインスタンスを取得してdelegateをセットする。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! FooTwoViewController
vc.colorString = colorLabel.text
vc.delegate = self
}
}

これでうまくいくはずです。もちろんこれはdelegateの一部なので実装する上ではアイディアが必要です。

~~~~~~~~~~~~ここまでが訳です~~~~~~~~~~~~~~~~~~~~~~

最後まで見て頂きありがとうございました。

この記事が気に入ったらサポートをしてみませんか?