从外部设置惰性变量而不初始化

Set lazy var from outside without initializing

我使用惰性变量定义定义了一个 class,其中 EXIFData 是一个结构:

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

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

现在我想在不执行惰性变量定义的初始代码的情况下为某些成员赋值。我怎样才能避免它并使用自己创建的结构成员而不是 c.exif.a = newExif.a ?我正在使用 Swift 3.0.

添加: 我是这样解决的:作为 class 的一部分,我使用所需的信息在延迟初始化中分配我的值。所以里面只有一个额外的 "if" 语句。无需外部多余和特殊技巧来避免标准初始化。

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

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

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