我尝试创建一个用户单例,每次用户登录或注册时都会使用用户名,电子邮件和用户ID进行初始化。
我有这样的事情,但我不确定如何处理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()
而没有初始化程序的必要参数。由于我还没有用户数据,我如何解决这个问题呢?
答案 0 :(得分:2)
使用给定属性创建单例的一种方法是使用一个函数,该函数将返回填充了详细信息的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: "xyz@gmail.com", 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)
}