質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

926閲覧

delegateとprotocolを用いた値渡しで値がLabelに反映されない

KCROW

総合スコア7

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/05/26 12:44

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に表示させる部分だと思いますが
これ以外に思いつきません。

初歩的な質問ですが
どうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomato879241

2021/05/26 13:39

>SecondViewControllerから渡ってきた値を SecondViewControllerにはそのような部分が見られませんが、それはどの部分を指しているのでしょうか?
tomato879241

2021/05/26 13:55

簡単な方法は 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に渡す。
hoshi-takanori

2021/05/26 17:15

delegate 自体は実装できてるはずですが、secondVC.delegate? = self の ? が余計ですね。
KCROW

2021/05/27 12:45

ご回答ありがとうございます。 ?の部分が余計で、ビルド通りました…初歩的な質問失礼しました。
guest

回答1

0

自己解決

secondVC.delegate? = self の ? を削除

投稿2021/05/27 12:46

KCROW

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KCROW

2021/05/28 22:21

なるほど・・ありがとうございます!勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問