简体   繁体   English

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

[英]Supporting optional parameter value in Swift property wrapper

I have below property wrapper for user defaults,我有以下用户默认值的属性包装器,

@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)
        }
    }
}

I am defining it like,我是这样定义的,

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

And calling it like,并称它为,

MyUserDefaultsCommon.yearOfBirth = 2010

When I set default value to nil build is failed with a sig abrt.当我将默认值设置为nil时,构建失败并带有 sig abrt。

How can I restrict passing optional default value from property wrapper class?如何限制从属性包装器 class 传递可选默认值? Or is there any other way around?或者有没有其他办法?

How can I restrict passing optional default value from property wrapper class?如何限制从属性包装器 class 传递可选默认值?

This is (was) a bug in Swift.这是(曾经)Swift 中的错误。 It's been fixed, and should be in the next release of 5.1 .它已被修复,并且应该在 5.1 的下一个版本中 You should not be able to pass nil here.你不应该在这里传递nil

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM