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

时间:2017-02-17 19:06:01

标签: swift swift3 nsuserdefaults

我的应用程序分为两个故事板:一个字符选择和一个主应用程序。当用户选择一个角色时,应用程序会将其转移到主应用程序,并且该故事板的所有视图现在应该与用户选择的角色相关。

我正在尝试找出共享字符串的最佳方式,该字符串将在所有主要应用程序故事板的视图之间包含所选字符的信息。现在我正在使用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)       
}

从那里,主应用程序故事板中的所有视图控制器都可以从UserDefaults获取字符串。

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

2 个答案:

答案 0 :(得分:0)

更好的方法是将角色传递给您正在寻找的viewController,最简单的方法是使用prepare(for segue。如果您通过说performSegue来更改performSegue(withIdentifier: "MainAppSegue", sender: sender)来电以通过发件人,则可以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 } } ,如下所示:

character

我对你正在执行segue的viewController的名称做了几个假设,并假设它有一个名为normalize-space()的变量,你可以在其中发送你的角色。您的新viewController现在具有对该字符的引用。

答案 1 :(得分:0)

如果我理解你的话。我个人使用Singeltons来实现Views之间的全局变量而不是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"