静态变量和函数问题

时间:2017-01-17 05:07:40

标签: swift

静态变量始终给出相同的值。为什么不总是调用函数?

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总是一样的。

1 个答案:

答案 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