在 Swift 属性 包装器中支持可选参数值

Supporting optional parameter value in Swift property wrapper

我有以下 属性 用户默认值包装器,

@propertyWrapper
class MyUserDefaultWrapper<T> {
    let key: String
    let defaultValue: T

    init(_ key: String, defaultValue: T) {
        self.key = key
        self.defaultValue = defaultValue
    }

    var wrappedValue: T {
        get {
            let suit = UserDefaults.standard
            return suit?.object(forKey: key) as? T ?? defaultValue
        }
        set {
            let suit = UserDefaults.standard
            suit?.set(newValue, forKey: key)
        }
    }
}

我是这样定义的,

struct MyUserDefaultsCommon{
    @MyUserDefaultWrapper("yearOfBirth", defaultValue: 1980)
    static var yearOfBirth: Int
}

并且这样称呼它,

MyUserDefaultsCommon.yearOfBirth = 2010

当我将默认值设置为 nil 时,构建失败并出现 sig abrt。

如何限制从 属性 包装器 class 传递可选默认值?或者有其他办法吗?

How can I restrict passing optional default value from property wrapper class?

This is (was) a bug in Swift. It's been fixed, and should be in the next release of 5.1。你应该不能在这里传递nil