使用协议集 get 具有 nil 值的 var

var with nil value using protocol set get

为什么我设置后的令牌nil是值?

var token: Token {
    set {
        let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.token)
        UserDefaults.standard.set(encodedData, forKey: File.UserDefaults.token)
    }
    get {
        if let data = UserDefaults.standard.data(forKey:  File.UserDefaults.token),
            let obj = NSKeyedUnarchiver.unarchiveObject(with: data) as? Token {
            return obj
        } else {
            return Token()
        }
    }
}

而不是在 set 语句中使用 self.token 使用 newValue.

set {
    let encodedData = NSKeyedArchiver.archivedData(withRootObject: newValue)
    UserDefaults.standard.set(encodedData, forKey: File.UserDefaults.token)
}

在 set 中调用 self.token 时,您基本上是在调用 get 语句。要实际接收设置的值,您需要使用 newValue。 newValue 基本上是 set 语句的一个隐藏参数。