2017-02-17 5 views
0

私のアプリは2つのストーリーボードに分割されています。キャラクター選択アプリとメインアプリケーションアプリです。ユーザがキャラクタを選択すると、アプリケーションはメインアプリケーションにセグメンテーションし、そのストーリーボードのすべてのビューはユーザが選択したキャラクタに関連するはずである。変数がストーリーボードのビューコントローラ間で共有されていますか?

私は、メインのアプリケーションストーリーボードのすべてのビューの間で選択されたキャラクターの情報を持つ文字列を共有する最良の方法を見つけようとしています。そこからメインのAppストーリーボード内のすべてのビューコントローラは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

より良い方法は、segueingするviewControllerに文字を渡すことです。これを行う最も簡単な方法はprepare(for segueです。あなたがperformSegue(withIdentifier: "MainAppSegue", sender: sender)を言って、送信者を渡すためにあなたのperformSegue呼び出しを変更する場合は、次のようにprepare(forでそれにアクセスすることができるようになります:私はあなたにセグエを実行しているのViewControllerの名前についてのカップルの仮定を作っ

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という変数があると仮定します。新しいviewControllerに文字の参照が追加されました。

0

私はあなたをよく理解しています。個人的に私はUserDefaultsではなくViews間のグローバル変数を達成するためにSingeltonsを使用しています

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" 
関連する問題