ベルマークのない自由帳

ベルマークのない自由帳

有益と無益の境界例

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変数)

f:id:Mantra:20180218144257p:plain

変数に値を渡すView Controller

次にこの変数に値を渡したいView Controller内でAppDelegateインスタンス化します。 インスタンス化の意味がよくわかりませんが、インスタントラーメンにお湯を注ぐような感じだと思います。 ただ、こちらのページのコードをそのまま書くと3回位エラーになるので、 f:id:Mantra:20180218144335p:plain

こんな風にしておきます。

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なんかのエラーが出たら、クラス内に直接コードを書いてしまっている場合だと思います。