叉焼.log

札幌のこととか、ITの事とか

【Xcode8.3.1,swift3.1】異なるビュー間での値の受け渡し方法 その2(Segue使うよ)

どもども。叉焼です。予告通りビュー間での値渡しver2 Segue使用編です。じゃあ、張り切っていきましょー

下ごしらえ

【Xcode8.3.1,swift3.1】異なるビュー間での値の受け渡し方法(Segue不使用) - 叉焼.logでやったこととほぼ同じことをSegueを使って実装します。
新たにビューを作りSecondViewControllerクラスを関連づけるところまでは同じです。
以降画像の通りに進めます。

f:id:cha-shu00:20170416134049p:plain

f:id:cha-shu00:20170416134328p:plain

ソースコード

ViewController.swift
import UIKit

class ViewController: UIViewController {
    let helloMessage="Hello"
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func pushButton(_ sender: Any) {
        goToNextPage()
    }
    
    func goToNextPage(){
        //指定したIDのSegueを初期化する。同時にパラメータを渡すことができる
        self.performSegue(withIdentifier: "mySegue", sender:helloMessage)
    }
    //Segueの初期化を通知するメソッドをオーバーライドする。senderにはperformSegue()で渡した値が入る。
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "mySegue" {
            let secondViewController = segue.destination as! SecondViewController
            secondViewController.myText = sender as! String
        }
    }
}
SecondViewController.swift
import UIKit

class SecondViewController: UIViewController {
    @IBOutlet weak var myLabel: UILabel!
    var myText:String!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print(myText)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }    
}

これでOKです!無事ボタンを押すとHelloが出力されたでしょうか?この方法のいいところは受け手側にごちゃごちゃ書かなくていいことと、AppDelegateをいじらなくていい分ブログが書きやすいということでしょうか(笑)。