使用协议集 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 语句的一个隐藏参数。
为什么我设置后的令牌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 语句的一个隐藏参数。