Swift - 如何将单例设置为nil

时间:2015-02-08 20:11:33

标签: swift singleton null

我正在使用swift编写应用程序并使用单例在应用程序中共享类对象User。 我希望能够在用户注销时将此单例设置为“nil”,以便在他们重新登录旧属性时不再存在(即名称,用户名等)。 我希望有一种简单的方法可以将单例设置回nil,而不必将每个属性设置为nil。

以下是我在应用中使用的用户类 User.activeUser

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

如何更改此设置,以便下面的代码不会给我一个警告,实际上会删除单例对象:

User.activeUser = nil

2 个答案:

答案 0 :(得分:3)

这应该有效:

private var _SingletonSharedInstance:MyClass! = MyClass()

class MyClass {
  let prop = "test"

  class var sharedInstance : MyClass {
    return _SingletonSharedInstance
  }

  init () {}

  func destroy() {
    _SingletonSharedInstance = nil
  }
}

但是后来对对象的引用仍然保留,所以你需要做一些额外的事情来使类中的方法调用无效。

答案 1 :(得分:0)

您的activeUser设置为只读计算属性。每次调用User.activeUser时,它都会为您重新计算activeUser。为了将其设置为nil,您必须添加一些逻辑来确定用户是否在计算属性之外登录。像这样的东西会起作用:

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
            }
        }
    }
}