2015-02-08 61 views
0

我寫在迅速的應用,並使用一個單共享一個類的對象,用戶,跨應用程序。 我希望能夠設置此單爲「零」,當用戶註銷時,這樣,當他們重新登錄老樓盤已不存在(即名稱,用戶名等)。 我希望有一個簡單的辦法只有設置單回零,而不必每個屬性設置爲零。斯威夫特 - 如何將一個單設爲零

這裏是在應用程序中使用User.activeUser我的用戶等級:

class User: NSObject 
{ 
    class var activeUser : User? { 
     struct Static { 
      static let instance : User = User() 
     } 
     return Static.instance 
    } 
} 

我怎樣才能改變這種做法,下面的代碼不給我一個警告,實際上尼爾斯出單對象:

User.activeUser = nil 
+0

只需使用一個可選 – 2015-02-08 20:12:11

回答

3

這應該工作:

private var _SingletonSharedInstance:MyClass! = MyClass() 

class MyClass { 
    let prop = "test" 

    class var sharedInstance : MyClass { 
    return _SingletonSharedInstance 
    } 

    init() {} 

    func destroy() { 
    _SingletonSharedInstance = nil 
    } 
} 

但是,然後對對象的引用仍然保留,所以您需要做一些額外的事情來使類中的方法調用無效。

0

你activeUser被設置爲只讀屬性計算。每次你調用User.activeUser時,它都會爲你重新計算activeUser。爲了將其設置爲零,您必須添加一些邏輯來確定用戶是否在計算屬性之外登錄。像這樣的東西會工作:

class User: NSObject 
{ 

    private struct userStatus { static var isLoggedIn: Bool = true } 

    class var activeUser : User? { 

     get { 
      if userStatus.isLoggedIn { 
       struct Static { 
        static let instance : User = User() 
       } 

       return Static.instance 
      } else { 
       return nil 
      } 
     } 

     set(newUser) { 
      if newUser != nil { 
       userStatus.isLoggedIn = true 
      } else { 
       userStatus.isLoggedIn = false 
      } 
     } 
    } 
}