サイトに書かれた通りに書いているつもりなのですが
https://qiita.com/chanNaru/items/326bd50a78cf34371169
https://pg-happy.jp/swift-delegate-protocol-rikai.html
https://rara-world.com/swift-protocol-delegate/
https://qiita.com/kudpig/items/00373757a306939ccacb
デリゲートが機能してくれません
エラーなどはでていません
ViewControllerのdelegateをPorintしてみたらnilになっていました
どこが間違っているのでしょうか?
ViewController
1class ViewController: UIViewController { 2 3weak var delegate: alertDataProtocol? 4 func alert(){ 5 delegate?.dataDidSelect(massageNumber: 1 ) 6 self.performSegue(withIdentifier: "alertVC", sender: nil) 7 } 8}
alertDataProtocol
1protocol alertDataProtocol: AnyObject { 2 func dataDidSelect(massageNumber: Int) 3}
alertViewController
1class alertViewController: UIViewController ,alertDataProtocol { 2 override func viewDidLoad() { 3 super.viewDidLoad() 4 let Storyboard = UIStoryboard(name: "Main", bundle: nil) 5 let nextVC = Storyboard.instantiateInitialViewController() as! ViewController 6 nextVC.delegate = self 7 } 8 9} 10extension alertViewController: alertDataProtocol { 11 func dataDidSelect(massageNumber: Int) { 12 print("test") 13 } 14 15 16}
ViewController から alertViewController を開いて、alertViewController の処理結果を ViewController で受け取りたいなら、delegate の向きが逆では…。
やりたいことしてはViewControllerで値を受け取りalertViewControllerで表示したいのですが向きが逆とはselfをViewControllerにつけるということでしょうか?
そういうことなら私が誤解してたかもしれません。ViewController で入力した値を alertViewController に渡してそこで表示するということなら、そもそも delegate は不要な気もします。いずれにせよ、質問文中のコードだけではよく分からないですね…。
エラーなどもなく動くのですがViewControllerのdelegateがnilになっているのですがサイトをみると初期はnilになる仕様と書いてあったりでなにが問題なのかわからない状態です
「サイトに書かれた通りに書いているつもり」という説明では、このview controllerで何をして、どのview controllerでは何が起きる、ということが他の人にはわからないのでは?
サイトに書かれた通りに書いていると主張するなら、せめてサイトのURLを示してください。そうすれば、サイトの説明とコードがめちゃくちゃなのか、それともサイトの説明を誤解してむちゃくちゃなコードを書いているのかアドバイスしてもらえると思います。
すいません凡ミスでした
サイトのURL追加しました
一体どの部分がサイトに書かれている通りに書いた部分なのでしょうか? 提示するURLを誤ってませんか?
すいません
複数見ていたのでこれってのは見つかりませんでしたが
ここも参考にしたと思いますし見たところそんな遠いと思いませんでした
普通の人はそれを「サイトに書かれている通りに書いている」とは言いません。サイトに書かれてあるdelegateの説明を参考にしてdelegateを実装してみたと言うことであれば、delegateのことが全く理解できていません。そもそも、ViewControllerからalertViewControllerに画面遷移する時にalertViewControllerに値を渡したいだけなら、hoshi-takanori
んも指摘されている通り、delegateを実装する必要がありません。
最終的に何がしたいのかをもうちょっと具体的に書いて欲しいです。例えば、
・遷移元 (ViewController) で入力したものを遷移先 (alertViewController) に表示したい → prepare(for segue:)
・遷移先 (alertViewController) で入力したものを遷移元 (ViewController) に戻って表示したい -> delegate
あと、alertViewController というクラス名ですが、AlertViewController のように先頭の文字は大文字にして欲しいですね。
クラス名の件わかりました今後は大文字で統一したいと思います。
したいことしてはデリゲートを使用して値を渡したいという一点だけです
様々なところで値渡しはなるべくデリゲートを使った方がよいと書いてあったのでやり方を変更してためしていたのですが、そもそもこのようなケースだとデリゲートの意向にはそぐわないことがわかりました。
教えていただいてありがとうございました。
あと、TakeOneさんなんの情報も書かないのでしたら不要な情報を書き込むのはやめてほしいです。
あなたのプログラム能力については判断できるレベルにありませんが初級レベルの人への質問などは適正がないと感じました。
すみません。サイトに書かれている通りに書いているのなら、そのサイトの情報を教えてもらえば、サイトの説明のどこが間違っているとか、どこを勘違いしているとかアドバイスできると思ってサイトのURLを求めたのですが、まさかこの状況を「サイトに書かれている通りに書いている」と説明されているとは夢にも思っておらず、私の空き時間にできることは、hoshi-takanoriさんが推測されたアドバイスをもう一度強調して伝えることだけでした。今後あなたの質問には回答やアドバイスを入れないようにしますので、ご安心ください。
回答1件
あなたの回答
tips
プレビュー