0

如果我的ScoreModel应用有一个需要传递给下一个的UIViewController. 它可能不存在,因此不会传递给这个新的UIViewController. 如果是这种情况,我想让它创建一个模型的新实例。这不起作用(无休止的循环),但它会给出我正在尝试创建的想法:

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

如何检查当前版本是否scoreModel == nil没有进入循环?

4

3 回答 3

2

如果您不尝试使用自定义 getter/setter,而是将 scoreModel 属性设置为可选(无论如何更好的约定),并且当您想将它传递给下一个视图控制器时检查它是否为 nil,该怎么办?像这样的东西:

var scoreModel: ScoreModel?
let nextViewController = UIViewController()
nextViewController.scoreModel = scoreModel ?? ScoreModel()
于 2017-01-04T16:27:01.067 回答
0

实际上你在谈论一个惰性初始化变量

lazy var scoreModel = ScoreModel()

第一次访问变量时调用初始化程序。

于 2017-01-04T16:25:36.320 回答
0

您可以像这样使用惰性变量:

class Test {


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

}

let test = Test()
test.scoreModel = ScoreModel()
于 2017-01-04T16:26:08.887 回答