【Swift】senderを駆使した値渡し遷移

以下の記事で、値を渡しながら遷移する方法を述べた。

nekokichi2yos2.hatenablog.com

nekokichi2yos2.hatenablog.com

 

しかし、その後にTwitterで違う方法で実装できる方法を返信ツイートで教えてもらったので、残す。

 

解説

 

 ・普通なら、渡す用の変数に渡したい値を渡し、その変数をprepare内で遷移先に渡す方法を行なっていた

・今回の方法では、渡したい値をperformeSegueのsenderに渡し、prepare内で宣言した変数にsenderを代入している

・つまり、①渡すための変数の宣言文、②変数に渡したい値を代入する文、この2つを省略できる

 

・エラーのことを考えて、guard let文で実装

 

コード

 

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loadinvarhe view, typically from a nib.
    }

    @IBAction func first(_ sender: Any) {
        performSegue(withIdentifier: "perform", sender: "first")
    }
    
    @IBAction func second(_ sender: Any) {
        performSegue(withIdentifier: "perform", sender: "second")
    }
    
    @IBAction func third(_ sender: Any) {
        performSegue(withIdentifier: "perform", sender: "third")
    }
    
    //遷移する際の処理
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "perform" {
            guard let svc = segue.destination as? SecondViewController else { return }
            guard let text: String = sender as? String else { return }
            svc.text = text
        }
    }
    
}