【Swift4】Swift初心者に贈る、画面遷移後に値を渡す方法【うまくいかない時は!!!!】


Swiftを学んでいく上で、値渡しは避けては通れない関門ですよね。

例えば、画面Aに入力された値[変数X]を、画面遷移後の画面Bに[変数X]を表示する処理とかは、初めてプログラミング言語を触る人では頭の中に???が浮かびまくると思います。

自分も、値渡しは初見時は躓いて出来るようになったのですが、3ヶ月ほど会計試験の資格勉強のためにSwiftを触らなくなったら、全然できなくなっていました(> <;)

数時間の死闘の末、再びなんとか出来るようになったので、
「初心者でもわかる値渡し」を記事にしてみようと思います。

prepare(for:segue)とか、クラスを作ってコード簡略化しようぜ!とか、「ある程度プログラミングに慣れた人向けの」方法はたくさんあるんですが、趣味レベルのアプリであれば、誰でも簡単に実装できるように作っています。

それでは、どうぞ!


◇ 目次 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

 1. 下準備 [Storyboard 編]
 2. コードを書いていく
 3. 実行してみた
    4. まとめ



 1. 下準備 [Storyboard 編]


[図] Storyboard

新規プロジェクトを作る方法は割愛します。

main.storyboardを開いて、この2つの画面を作ってみました。
最初の画面はUItextfieldとUIButton、二つ目の画面は全てUILabelです。

実装するイメージとしては、
UIButtonを押したら、UITextFieldに入力された文字がUILabelに表示される処理を想像してもらえればいいと思います。

画面ができたら、
[図] StoryboardのSegue

Segueで画面を繋ぎます。

個人的にSegueで繋いでいくのはあまり好きではないのですが、Segueを使わない画面遷移だと値渡しが出来なくなるので、プログラミングが上達するまではお世話になるしかないです!(笑)

重要なポイントは、Segueのidentifierを「toSecond(任意の名前)」にしておくことです!

これにてStoryboardの設定・下準備は終了です。

   2. コードを書いていく

[図] メニュー

まず、新規ファイルで「SecondViewController.swift」というファイルを作成してください。


  ViewController.swift  

import UIKit

class ViewController: UIViewController {

    @IBOutlet var myTextField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func register(){
    
        // registerボタンを押したら、toSecondというIDを持つsegueに移動する
        self.performSegue(withIdentifier: "toSecond", sender: nil)
        
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        // SecondViewControllerに移動する変数vcを定義する
        let vc = segue.destination as! SecondViewController
        //ViewController2のtextにtextFieldのテキストを代入
        vc.Secondtext = myTextField.text!
        
    }
    
    

}


 SecondViewController.swift  

import UIKit

class SecondViewController: UIViewController {
    
    //受け渡し用の空の変数Secondtextを用意しておく
    var Secondtext = String()
    @IBOutlet var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        //代入する
        myLabel.text = Secondtext
        

        // Do any additional setup after loading the view.
    }


 3. 実行してみた

「てすと」という文字を入力してボタンを押してみる。


[図]実行結果
どうやら上手く値が渡されたようだ。

 4. まとめ

というわけで、初心者にわかりやすい画面遷移と値渡しの方法というものを書いてみました。

値渡しの方法としては他にも、冒頭に書いたprepareforsegue[swift,Xcodeのバージョンによって書き方が違うの注意が必要]というメソッドがあったり、他の書き方があるので、興味のある人は調べてみると良いと思われます!

コメント

このブログの人気の投稿

【Unity】シーンギズモがデフォルトで表示されない時

【Swift4】argument passed to call that takes no arguments の解決策

【Rails5】SyntaxError: (): mapping values are not allowed エラーの解決法