swiftのdelegateって?
URL: https://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の一部なので実装する上ではアイディアが必要です。
~~~~~~~~~~~~ここまでが訳です~~~~~~~~~~~~~~~~~~~~~~
最後まで見て頂きありがとうございました。
この記事が気に入ったらサポートをしてみませんか?