如果存在,则计算变量返回self,如果为n,则返回新实例

时间:2017-01-04 16:19:07

标签: ios swift computed-properties

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

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

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

3 个答案:

答案 0 :(得分:2)

如果不是试图搞乱自定义getter / setter,你只需将scoreModel属性设置为可选(无论如何更好的约定),当你想将它传递给下一个视图控制器时,你会检查它是否为零。像这样:

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

答案 1 :(得分:0)

其实你在谈论一个懒惰的初始化变量

lazy var scoreModel = ScoreModel()

第一次访问变量时会调用初始值设定项。

答案 2 :(得分:0)

你可以使用这样的懒惰变种:

class Test {


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

}

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