2017-01-17 4 views
0

Статическая переменная всегда дает такое же значение. Почему функция не всегда называется?Задача статической переменной и функции

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 всегда одинаково.

ответ

2
static var CurrentEmployee : Employee? = SessionManager.GetSessionValue(...) as? Employee 

является хранится свойством (типа) с начальным значением, которое вычисляется точно один раз,, когда свойство доступно в первый раз.

То, что вы хотите, это вычисляется свойство с геттер который оценивается при каждом доступе:

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 
Смежные вопросы