iOSアプリ開発メモ No.12 -App Delegateを使ったView Controller間のデータ移動-
以前異なるView Controller間で値のやり取りを行う場合「App Delegateを使った方法が1番簡単」と書きました。 そのやり方を確認したいと思います。
方法
前回も紹介したこちらのページを参考にしていきます。 https://qiita.com/xa_un/items/814a5cd4472674640f58
AppDelegateで変数を宣言
まずAppDelegate.swift内にView Controller間で使いたい型の変数を宣言します。 (ここではString型のhoge変数)
変数に値を渡すView Controller
次にこの変数に値を渡したいView Controller内でAppDelegateをインスタンス化します。 インスタンス化の意味がよくわかりませんが、インスタントラーメンにお湯を注ぐような感じだと思います。 ただ、こちらのページのコードをそのまま書くと3回位エラーになるので、
こんな風にしておきます。
var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate
そうしたら好きなタイミングでappDelegate.変数名として呼び出して、値を入れてあげます。
var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate override func viewDidLoad() { super.viewDidLoad() appDelegate.hoge = “hoge" }
変数を受け取るView Controller
同様に以下のおまじないを唱えて、
var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate
同じ型の変数を用意して好きなタイミング受け取れば完了!
var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate var recievedHoge: String? override func viewDidLoad() { super.viewDidLoad() recievedHoge = appDelegate.hoge }
もしExpected declarationなんかのエラーが出たら、クラス内に直接コードを書いてしまっている場合だと思います。