Swift ProperyWrapper не может преобразовать значение объявленного типа в значение указанного типа - PullRequest
2 голосов
/ 27 февраля 2020

Вот моя оболочка свойства:

@propertyWrapper struct UserDefaultsBacked<Value> {
    let key: String
    let storage: UserDefaults = .standard
    var defaultValue: Value

    var wrappedValue: Value? {
        get {
            let value = storage.value(forKey: key) as? Value
            return value ?? defaultValue
        }
        set { storage.setValue(newValue, forKey: key) }
    }
}

И эта переменная, snapStatus, должна иметь логическое значение, верно?

@UserDefaultsBacked(key: "snap-is-enabled", defaultValue: false)
var snapStatus: Bool

Но компилятор выдает ошибку:

Невозможно преобразовать значение типа 'UserDefaultsBacked' в указанный тип 'Bool'

enter image description here

Я делаю это неправильно?

1 Ответ

1 голос
/ 27 февраля 2020

Вы объявили wrappedValue необязательным, например, Value?. Измените его на необязательный, и ошибка будет go исчезнуть:

@propertyWrapper struct UserDefaultsBacked<Value> {
    let key: String
    let storage: UserDefaults = .standard
    var defaultValue: Value

    var wrappedValue: Value {   // not `Value?`
        get {
            let value = storage.value(forKey: key) as? Value
            return value ?? defaultValue
        }
        set { storage.setValue(newValue, forKey: key) }
    }
}

В качестве альтернативы, вы можете оставить wrappedValue как есть, но тогда вам придется объявить snapStatus в качестве необязательного:

var snapStatus: Bool?

Я думаю, что устранение необязательных вариантов - это путь к go, но я включаю это для полноты картины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...