delegateとprotocolを用いた値渡しを練習しているのですが、
FirstViewControllerのLabelに値が反映されません。。。
FirstViewController
1import UIKit 2 3 4 5class FirstViewController: UIViewController { 6 7 @IBOutlet weak var label: UILabel!{ 8 didSet{ 9 label.text = "0" 10 } 11 } 12 13 @IBAction func nextButton(_ sender: UIButton) { 14 15 let secondStoryboard = UIStoryboard(name: "Second", bundle: nil) 16 let secondVC = secondStoryboard.instantiateInitialViewController() as!SecondViewController 17 18 secondVC.delegate? = self 19 let nav = self.navigationController! 20 nav.pushViewController(secondVC, animated: true) 21 } 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 26 } 27 } 28 29extension FirstViewController:DataProtocol { 30 func tap(model: CountModel){ 31 label.text = model.count.description 32 33 } 34} 35
SecondViewController
1import UIKit 2 3 4class SecondViewController: UIViewController{ 5 6 var delegate: DataProtocol? 7 private var countmodel = CountModel.init(count: 0) 8 9 @IBOutlet weak var countLabel: UILabel!{ 10 didSet{ 11 countLabel.text = countmodel.count.description 12 } 13 } 14 15 @IBAction func countButtun(_ sender: UIButton) { 16 countmodel.count = countmodel.count + 1 17 countLabel.text = countmodel.count.description 18 print(countmodel) 19 } 20 21 22 @IBAction func addButton(_ sender: Any) { 23 24 25 delegate?.tap(model: countmodel) 26 print("tapしたよ") 27 print(countmodel) 28 self.navigationController?.popViewController(animated: true) 29 } 30 31 override func viewDidLoad() { 32 super.viewDidLoad() 33 34 } 35 36 } 37
CountModel
1import Foundation 2 3struct CountModel { 4 var count:Int = 0 5} 6
DataProtocol
1import Foundation 2 3protocol DataProtocol { 4 func tap(model: CountModel) 5} 6
問題はFirstViewControllerのSecondViewControllerから渡ってきた値をLabelに表示させる部分だと思いますが
これ以外に思いつきません。
初歩的な質問ですが
どうかよろしくお願いいたします。
>SecondViewControllerから渡ってきた値を
SecondViewControllerにはそのような部分が見られませんが、それはどの部分を指しているのでしょうか?
簡単な方法は
1.「class SecondViewController: UIViewController{」の上にprotocolの記述をする。
2. FirstViewControllerに戻り、「extension FirstViewController:DataProtocol」の部分を削除する。
3. FirstViewControllerに「DataProtocol」を加える。(class FirstViewController: UIViewController, DataProtocol {)
4. XcodeがStubを加えますかと訊いてくるので、加えてもらう。
5. 4のStubでCountModelをもらい、countLabelに渡す。
delegate 自体は実装できてるはずですが、secondVC.delegate? = self の ? が余計ですね。
ご回答ありがとうございます。
?の部分が余計で、ビルド通りました…初歩的な質問失礼しました。
回答1件
あなたの回答
tips
プレビュー