画面遷移時の値の受け渡し方 (Swift)
こんにちは。
Swift の、画面遷移時の値の受け渡しについて調べることがあったのでまとめました。
値の受け渡し方
まず、2画面あって Segue で繋いだ状態にします。この時、Segue の identifier に名前をつけておきます。
(ここでは toSecond としました)
左画面の数字がボタンになっているので、それを押して右側の画面に移動すると、数字に対応する食べ物の名前が表示されるというものを作ります。
Storyboard に配置したボタンやラベルと swift のソースコードを紐付けます。
次に、ViewController.swift に以下のコードを書き足します。
myText は、ViewController2.swift で定義する変数です。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "toSecond" { let viewController2 = segue.destination as! ViewController2 viewController2.myText = sender as! String } } @IBAction func toSecond(_ sender: UIButton) { //画面遷移させたいボタンの中に書く self.performSegue(withIdentifier: "toSecond", sender: number.text) // sender で指定したものを渡せる }
ここでは、number という名前の label に表示させたテキストを渡すので、sender: number.text としています。
最後に、ViewController2.swift に以下のコードを書き足します。
var myText: String? //↓元から書かれているコードの中に書く override func viewDidLoad() { super.viewDidLoad() var num:Int = Int(myText!)! if num == 1 { label.text = myText! + " Ramen" } else if num == 2 { label.text = myText! + " Curry" } else if num == 3 { label.text = myText! + " Beef Don" } // Do any additional setup after loading the view. }
調べたこと覚書
- ! や ?
型が明確に決まっていない時に ? を使って、決まった時に ! を使う・・・みたいな感じなのか?あまりわかっていない。
- func prepare(for segue: UIStoryboardSegue, sender: Any?)
「遷移するから準備してね」という関数みたいです。
segue で移動するときの、 ViewController の目的地
- as
型変換を行うらしい。この場合だと、変数にクラスを突っ込んでいる?
クラスと継承 (勘違いしていたこと)
初めに調べた時、「変数 共有 やり方」などで調べていて出てきたのが「クラスとその継承」でした。
しかし、おそらく画面遷移時の値の受け渡しにはあまり関係ありませんでした。
クラスやそれの継承が必要になるのは、同じようなセットの処理を複数回行う時のようです。
例えば、以下のような感じでしょうか。
class cat{ var age:Int var type:String init(age0:Int, type0:String){ age = age0 type = type0 } func say(){ print("nyan") } } class dog:cat{ init(){ super.init(age:2, type: "Shibaken") } override func say() { print("wan") } }
参考記事
【Swift】継承とエクステンションについて説明するよ | Fussan Blog
詳細!Swift 4 iPhoneアプリ開発 入門ノート Swift 4+Xcode 9対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- メディア: Kindle版
- この商品を含むブログを見る