从外部设置lazy var而不初始化

时间:2017-01-26 20:53:19

标签: swift class initialization lazy-evaluation lazy-initialization

我使用惰性var定义定义了一个类,其中EXIFData是一个结构:

struct EXIFData {
    var a : String
    var b : String
}

class xxx {
...
    lazy var exif: EXIFData = {
    ...
        return EXIFData(url: self.initUrl as CFURL)
    }()

现在我想为某些成员分配一个值而不执行lazy var definition的初始代码。我怎样才能避免它并为自己创建的结构成员而不是像c.exif.a = newExif.a那样?我使用的是Swift 3.0。

添加了: 我这样解决了:作为同一个类的一部分,我使用所需的信息在惰性初始化中分配我的值。所以只有一个额外的" if"声明。不需要外部过剩和特殊技巧来避免标准初始化。

1 个答案:

答案 0 :(得分:3)

如果您只是在读取之前正常分配值,则惰性初始值设定项将不会运行。这是一个测试用例:

class Class {
    lazy var lazyVar: String = {
        print("Lazy initializer ran")
        return "Default value"
    }()
}

let object = Class()
object.lazyVar = "Custom value"
print(object.lazyVar)