[Swift] AppDelegateを使ってデータを共有

#はじめに
画面間でのデータ共有の方法の１つに`AppDelegate`を使用する方法があるらしい。
いろんなデータの共有の仕方がありますが、割とシンプルな方法かなと思います。
実際に試してみたので、記事にしてみます。
#AppDelegateとは
全ての画面からアクセスできるようになっているファイルになります。
なので、ここに変数を定義する事でデータを共有する事ができるという訳です。
#使ってみた
今回は`TabBarController`を使用して画面間でのデータ共有をしたいと思います。
青のviewの`textField`に入力したデータを保存ボタンで黄色の`textField`に渡します。
![スクリーンショット 2020-12-20 11.53.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/9efef4bf-085d-329e-ed97-18c74864cc89.png)

`AppDelagate`の中に変数を用意します。
![スクリーンショット 2020-12-20 10.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/51e67fbd-98db-6d10-99ef-ca5f5101a118.png)
ボタンの処理は以下の通りです。
AppDelegateにアクセスするために定数`delegate`を用意して、定数にアクセスするための処理を入れます。
以下のコードにアクセスしたいので、`let delegate = UIApplication.shared.delegate as! AppDelegate`とします。
取り出したい変数はAppDelegate型の中にあるので、as!でAppDelegate型に変換して取り出します。（この辺りの説明自信ない）

```swift
class AppDelegate: UIResponder, UIApplicationDelegate {

    var shareData:String = ""


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }


}
```

そして、textFieldに入力された文字を`AppDelegate`に用意した変数に入れます。

```swift
@IBAction func buttonAction(_ sender: Any) {
        let delegate = UIApplication.shared.delegate as! AppDelegate
        delegate.shareData = blueTextField.text!
    }
```
`YellowViewController`では`viewWillAppear`を使用して、切り替わるたびにデータを表示するようにします。

```swift
override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
            let delegate = UIApplication.shared.delegate as! AppDelegate
            yellowTextField.text = delegate.shareData
    }
```

#今回のコード

```swift
import UIKit

class BlueViewController: UIViewController {
    @IBOutlet var blueTextField: UITextField!
   
    @IBAction func buttonAction(_ sender: Any) {
        let delegate = UIApplication.shared.delegate as! AppDelegate
        delegate.shareData = blueTextField.text!

    }
}
```

```swift
import UIKit

class YellowViewController: UIViewController {
    
    @IBOutlet var yellowTextField: UITextField!
    
        override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
            let delegate = UIApplication.shared.delegate as! AppDelegate
            yellowTextField.text = delegate.shareData
    }
}
```