2017-02-17 102 views
0

我的应用程序分为2个故事板:一个字符选择和一个主应用程序。当用户选择一个字符时,应用程序会继续到主应用程序,并且该故事板的所有视图现在都应该与用户选择的字符相关联。故事板视图控制器之间共享变量?

我想找出共享一个字符串的最佳方式,该字符串将在所有主应用程序故事板视图之间具有所选字符的信息。现在,我使用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

更好的方法是将角色传递给您继续使用的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 
    } 
} 

我做你正在执行的SEGUE到了的viewController的名字一对夫妇的假设,并假定它有一个名为character的变量,你可以在其中发送你的角色。你的新viewController现在有一个对角色的引用。

0

如果我很了解你。我个人使用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" 
相关问题