web-dev-qa-db-ja.com

Swift:View ControllerからAppDelegate変数にアクセスする方法は?

View Controllerの変数をテキストまたはcsv(優先)ファイルに書き込みたいと思います。

確かに、私は描画アプリをやっています。そして、指の現在の位置をファイルに書きたいです。

class ViewController: UIViewController {var lastPoint = CGPoint.zeroPoint ... }

AppDelegateからlastPoint.xとlastPoint.yにアクセスしたいと思います。どうすればそれができますか?ありがとうございました。

16
Yann Amouyal

あなたの質問は混乱に満ちていますが、もしそれがあなたが探しているものなら:

そのような参照を取得することでappDelegateにアクセスできます:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

その後、appDelegateにlastPointというプロパティを保存している場合、次のようにそのコンポーネントに簡単にアクセスできます。

let x = appDelegate.lastPoint.x
let y = appDelegate.lastPoint.y

AppDelegateからviewControllerプロパティにアクセスする必要がある場合は、appdelegateでView Controllerへの参照を持つことをお勧めします:

var myViewController: ViewController!

次に、View Controllerが作成されたら、appdelegateプロパティにそれへの参照を保存できます。

AppDelegateの外部でView Controllerを作成する場合:

Swift 1-2構文

var theViewController = ViewController()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.myViewController = theViewController

Swift 3-4構文

var theViewController = ViewController()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myViewController = theViewController

AppDelegate内にView Controllerを作成する場合:

self.myViewController = ViewController()

その後、次のようなプロパティにアクセスするだけで、appdelegateからViewControllerのデータにアクセスできます。

let x = self.myViewController.lastPoint.x
let y = self.myViewController.lastPoint.y
33
The Tom

Swift 3アップデート

    var theViewController = ViewController()
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.myViewController = theViewController
2
iLandes

BaseViewControllerを作成してこれを書くことができます

class BaseViewController {
  lazy var appDelegate : AppDelegate {
     return UIApplication.shared.delegate as? AppDelegate
  }
}

baseViewControllerで他のViewControllerを継承し、これにアクセスします

class ViewController : BaseViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    print(self.appDelegate?.lastPoint.x)
    print(self.appDelegate?.lastPoint.x)
}}
1
Agent Smith

次のように、AppDelegate.SwiftでViewControllerのインスタンスを作成することで、AppデリゲートからViewControllerにアクセスできました。

var mainViewController = ViewController()

func applicationWillEnterForeground(_ application: UIApplication) {
    mainViewController.myVariable = "Hello".
}

それでも、私はAppDelegateがmainViewControllerがその特定のViewControllerを指すことになっていることをどのように「知る」のか理解していません。アプリケーションには単一のビューと単一のViewControllerがあるので問題ありませんが、異なるUIViewに関連付けられた複数のViewControllerがあったのは何ですか?ここの誰かがそれに光を当てることができれば感謝します。よろしく、アンドレ

1
Andre Guerra