我的应用程序分为两个故事板:一个字符选择和一个主应用程序。当用户选择一个角色时,应用程序会将其转移到主应用程序,并且该故事板的所有视图现在应该与用户选择的角色相关。
我正在尝试找出共享字符串的最佳方式,该字符串将在所有主要应用程序故事板的视图之间包含所选字符的信息。现在我正在使用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
获取字符串。
这是做这种事情的最佳方式还是有更好的方法?
答案 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"