Swift: Как получить доступ к переменной AppDelegate с контроллера View?
Я хотел бы написать в текстовом или csv (предпочтительно) файл переменную из контроллера вида.
Действительно, я делаю приложение для рисования, и я бы хотел записать в файл текущую позицию пальца.
class ViewController: UIViewController {var lastPoint = CGPoint.zeroPoint ... }
Я хотел бы иметь доступ к lastPoint.x и lastPoint.y из AppDelegate. как я мог это сделать? Спасибо.
Ответы
Ответ 1
Ваш вопрос полон путаницы, но если это то, что вы ищете:
Вы можете получить доступ к appDelegate, получив ссылку на него следующим образом:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
после этого, если у вас есть свойство, называемое lastPoint в приложении appDelegate, вы можете легко получить доступ к его компонентам:
let x = appDelegate.lastPoint.x
let y = appDelegate.lastPoint.y
Если вам нужно получить доступ к свойствам viewController из AppDelegate, то я предлагаю иметь ссылку на ваш контроллер представления в вашем appdelegate:
var myViewController: ViewController!
то, когда ваш контроллер просмотра создан, вы можете сохранить ссылку на него в свойстве appdelegate:
Если вы создаете свой контроллер просмотра вне вашего приложения appDelegate:
Синтаксис 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:
self.myViewController = ViewController()
После этого вы можете получить доступ к своим данным из вашего диспетчера view из вашего приложения appdelegate, просто получив доступ к его свойству:
let x = self.myViewController.lastPoint.x
let y = self.myViewController.lastPoint.y
Ответ 2
Обновление Swift 3
var theViewController = ViewController()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myViewController = theViewController
Ответ 3
Вы можете создать BaseViewController и написать это
class BaseViewController {
lazy var appDelegate : AppDelegate {
return UIApplication.shared.delegate as? AppDelegate
}
}
и наследовать другие контроллеры вида с BaseViewController и получить к нему доступ
class ViewController : BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(self.appDelegate?.lastPoint.x)
print(self.appDelegate?.lastPoint.x)
}}
Ответ 4
Мне удалось получить доступ к моему ViewController из делегата приложения, создав экземпляр ViewController в AppDelegate.swift, например:
var mainViewController = ViewController()
func applicationWillEnterForeground(_ application: UIApplication) {
mainViewController.myVariable = "Hello".
}
Тем не менее, я не понимаю, как AppDelegate "знает", что mainViewController должен указывать на этот конкретный ViewController. Поскольку мое приложение имеет один вид и один ViewController, это прекрасно, но что у меня было несколько ViewControllers, связанных с различными UIViews? Цените, если кто-то здесь может пролить свет на это.
С наилучшими пожеланиями,
Andre