我正在使用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
答案 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
}
}
}
}