传递参数来初始化Singleton
我试图创建一个用户单例,每次用户登录或注册时都会使用用户名,电子邮件和用户标识进行初始化。传递参数来初始化Singleton
我有这样的事情去,但我不知道该怎么做与static let sharedInstance
:
class UserSingle {
var userName: String
var email: String
var userID: Int
static let sharedInstance = UserSingle()
private init(userName: String, email: String, userID: Int){
self.userName = userName
self.email = email
self.userID = userID
}
}
我想使用的值从下面的字典中使用的参数初始化单身。
userInfo = ["username": "fake name", "email": "fake email", "userID": 1]
截至目前,我得到一个错误的sharedInstance
因为它呼吁UserSingle()
而无需初始化所需的参数。由于我没有用户数据,我该如何解决这个问题?创建具有给定性质的单身
一种方式是通过使用将返回一个Singleton充满在细节功能。
class UserSingle {
var userName: String
var email: String
var userID: Int
static let sharedInstance = UserSingle()
private static func sharedInstanceWith(userName:String, email:String, userID: Int) -> UserSingle {
let instance = UserSingle.sharedInstance
instance.userName = userName
instance.email = email
instance.userID = userID
return instance
}
private init(userName: String = "" , email: String = "", userID: Int = 0){
self.userName = userName
self.email = email
self.userID = userID
}
}
let user1 = UserSingle.sharedInstance
let user2 = UserSingle.sharedInstanceWith("BJ", email: "[email protected]", userID: 12)
user1.userID //12
我不能做这样的工作,一个相当漂亮的做法一样所以。这实际上不会像每个sharedInstance
调用正在创建的新对象那样是单身。
static let sharedInstance: (String, String, Int) -> UserSingle = {
name, email , id in
return UserSingle(userName: name, email: email, userID: id)
}
有趣的解决方案。我会尝试一下。问题很简单,是'private init'是什么使单身人士成为一个单身人士。我有一个没有初始化的版本。 – Brosef
@brosef''static let sharedInstance = UserSingle()'''是什么使单身。 '''私有init('''强制调用者使用Singleton而不是允许创建一个新对象 – kandelvijaya
我明白了,只要我不尝试创建新对象,那么它不应该是一个问题?截至目前,如果我完全删除init,我可以得到一个用户singleton并从所有viewcontrollers访问它。 – Brosef
你真的想在哪里创建实例,以及如何将该用户设置为当前用户(而不是用户)? – Wain
@一旦字典从登录过程返回,我就想创建用户单例。我没有创建多个用户单例 - 只有一个用于当前用户,多数民众赞成它。 – Brosef