使用协议集get获取nil值的var

时间:2018-06-06 14:54:35

标签: swift get set var

为什么设置后的令牌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()
        }
    }
}

1 个答案:

答案 0 :(得分:2)

不要在set语句中使用newValue,而是使用set { let encodedData = NSKeyedArchiver.archivedData(withRootObject: newValue) UserDefaults.standard.set(encodedData, forKey: File.UserDefaults.token) }

newValue

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