代码之家  ›  专栏  ›  技术社区  ›  bruno vignesh

使用协议集get的值为零的var

  •  0
  • bruno vignesh  · 技术社区  · 6 年前

    为什么是代币 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 回复  |  直到 6 年前
        1
  •  2
  •   Christoph    6 年前

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

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

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