【发布时间】:2019-10-29 06:54:14
【问题描述】:
我们现在有了一种创建惰性变量的新方法。在swift-evolution/proposals/0258-property-wrappers.md中有描述:
@propertyWrapper
enum Lazy<Value> {
case uninitialized(() -> Value)
case initialized(Value)
init(wrappedValue: @autoclosure @escaping () -> Value) {
self = .uninitialized(wrappedValue)
}
var wrappedValue: Value {
mutating get {
switch self {
case .uninitialized(let initializer):
let value = initializer()
self = .initialized(value)
return value
case .initialized(let value):
return value
}
}
set {
self = .initialized(newValue)
}
}
}
它是线程安全的实现吗?如果不是,如何重现非线程安全的行为?
【问题讨论】:
标签: swift generics lazy-evaluation lazy-initialization property-wrapper