繁体   English   中英

故事板的视图控制器之间共享变量吗?

[英]Variable shared between view controllers of storyboard?

我的应用程序分为两个情节提要:一个角色选择和一个主要应用程序。 当用户选择一个角色时,该应用会选择到主应用程序,并且故事板的所有视图现在都应与用户选择的角色相关。

我正在尝试找出在所有主应用程序故事板视图之间共享具有选定角色信息的字符串的最佳方法。 现在,我正在使用UserDefaults来设置全局变量:

func loadMainApp(sender: UITapGestureRecognizer) {
    let currentCharcter = allCharacters[(sender.view?.tag)!]
    let defaults: UserDefaults = UserDefaults.standard
    defaults.setValue(currentCharacter, forKey: "CurrentCharacter")
    performSegue(withIdentifier: "MainAppSegue", sender: self)       
}

从那里,Main App故事板上的所有视图控制器都可以从UserDefaults获取字符串。

这是做这种事情的最好方法还是有更好的方法?

更好的方法是将字符传递给您要锁定的viewController,最简单的方法是用prepare(for segue 。如果您更改了performSegue调用以通过说performSegue(withIdentifier: "MainAppSegue", sender: sender)您将可以在prepare(for访问它prepare(for例如:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    //Safely check to make sure this is the correct segue by unwrapping the sender and checking the segue identifier
    if let tapGesture = sender as? UITapGestureRecognizer, let tapGestureView = sender.view, let mainViewController = segue.destination as? MainViewController, segue.identifier == "MainAppSegue" {

        //Get a reference to the character that was selected
        let currentCharacter = allCharacters[tapGestureView.tag]

        //Pass the character to the new viewController
        mainViewController.character = currentCharacter
    }
}

我对要执行segue的viewController的名称做了一些假设,并假设它有一个名为character的变量,您可以在其中发送您的角色。 现在,您的新viewController具有对该字符的引用。

如果我对你的理解很好。 我个人是使用Singeltons来实现视图之间的全局变量,而不是UserDefaults

class SomeClass{
static let sharedInstance = SomeClass()
var someString = "This String is same from any class"
}

Usage inside of some function :
SomeClass.sharedInstance.someString  = "Changing Global String"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM