2017-01-04 3 views
0

ScoreModel私のアプリケーションには次のUIViewControllerに渡す必要があります。存在しない可能性がありますので、この新しいUIViewControllerに渡されません。このような場合は、モデルの新しいインスタンスを作成したいと考えています。これは、(無限ループ)が動作しませんが、それは私が作成しようとしているかのアイデアを与えるだろう。計算された変数の戻り値は存在する場合はself、存在しない場合はnewのインスタンス

var scoreModel : ScoreModel! { 
    get { 
     if self.scoreModel == nil { 
      return ScoreModel() 
     } else { 
      return self.scoreModel 
     } 
    } 
    set { 
     self.scoreModel = newValue 
    } 
} 

私はループで取得せずにscoreModel == nilの現在のバージョンかどうかを確認するにはどうすればよいですか?

+0

あなたは怠惰なvarを望むように聞こえます。ここで読む:http://alisoftware.github.io/swift/2016/02/28/being-lazy/ –

答えて

2

どうかのを、あなたは自分のscoreModelのオプションのプロパティ(とにかく、より良い大会)とするとき、あなたを作りましたその次のView Controllerに渡したいとします。このようなもの:

var scoreModel: ScoreModel? 
let nextViewController = UIViewController() 
nextViewController.scoreModel = scoreModel ?? ScoreModel() 
+1

これは美しく機能しました!ありがとう – Emptyless

0

実際には変数が最初にアクセスされたときに初期化子が呼び出される。怠惰な初期化変数

lazy var scoreModel = ScoreModel() 

について話しています

+0

それを作成する前に、それが以前のViewControllerによってまだ渡されていないかどうかを知りたいと思った。 ) – Emptyless

0

あなたはこのような怠惰なVAR使用することができます。代わりにカスタムゲッター/セッターと周りの混乱しようとする、

class Test { 


    lazy var scoreModel: ScoreModel = { 
     return ScoreModel() 
    }() 

} 

let test = Test() 
test.scoreModel = ScoreModel() 
+0

これは新しいインスタンスを作成しませんでしたか? – Emptyless

関連する問題