静态变量始终给出相同的值。为什么不总是调用函数?
class SessionManager {
static func AddSession(key : String, value : Any) {
let session = UserDefaults.standard
if session.object(forKey: key) != nil {
session.removeObject(forKey: key)
}
session.setValue(NSKeyedArchiver.archivedData(withRootObject: value), forKey: key)
}
static func GetSessionValue(key : String) -> Any? {
let session = UserDefaults.standard
return NSKeyedUnarchiver.unarchiveObject(with: session.value(forKey: key) as! Data)
}
static var CurrentEmployee : Employee? = SessionManager.GetSessionValue(key: CL.SESSION__CURRENT_EMPLOYEE) as? Employee
}
SessionManager.CurrentEmployee
总是一样的。
答案 0 :(得分:2)
static var CurrentEmployee : Employee? = SessionManager.GetSessionValue(...) as? Employee
是存储的(类型)属性,其初始值已经过评估 一次,第一次访问该属性时。
你想要的是带有getter的计算属性 在每次访问时评估:
static var CurrentEmployee : Employee? { return SessionManager.GetSessionValue(...) as? Employee }
自包含的例子:
class Foo {
static var currentNumber = 0
static func nextNumber() -> Int {
currentNumber += 1
return currentNumber
}
static var storedProp = nextNumber()
static var computedProp: Int { return nextNumber() }
}
print(Foo.storedProp) // 1
print(Foo.storedProp) // 1
print(Foo.storedProp) // 1
print(Foo.computedProp) // 2
print(Foo.computedProp) // 3
print(Foo.computedProp) // 4
print(Foo.storedProp) // 1