我实际上有一个用户单例对象,其中填充了用户数据(名称,图片等)。
那不是敏感数据,所以我将它们存储在会话中
当我退出应用并重新启动时,单身初始化就像那样
class var sharedInstance: User {
struct Singleton {
static var instance = User( firstName: NSUserDefaults.standardUserDefaults().objectForKey("firstName") as? String,
lastName: NSUserDefaults.standardUserDefaults().objectForKey("lastName") as? String,
email: NSUserDefaults.standardUserDefaults().objectForKey("email") as? String,
profilPicture: NSUserDefaults.standardUserDefaults().objectForKey("profilPicture") == nil ?
nil : UIImage(data: NSUserDefaults.standardUserDefaults().objectForKey("profilPicture") as NSData))
}
return Singleton.instance
}
所以我想知道它是否存在这样的整洁解决方案? 或者也许我做的是一个好主意?
答案 0 :(得分:1)
您可以使用块初始化语法清除一些重复的子表达式和查找来清理它:
class var sharedInstance: User {
struct Singleton {
static var instance : User = {
let defaults = NSUserDefaults.standardUserDefaults()
let imageData = defaults.objectForKey("profilPicture") as? NSData
let user = User(
firstName: defaults.objectForKey("firstName") as? String,
lastName: defaults.objectForKey("lastName") as? String,
email: defaults.objectForKey("email") as? String,
profilPicture: imageData != nil ? UIImage(data: imageData!) : nil
)
return user
}()
}
return Singleton.instance
}
至于在NSUserDefaults
中存储此信息,这就是它的目的。所以,是的,这是一个合理的方法。根据您在那里存储的密钥数量,通过将它们放入字典来对事物进行聚类可能很有用,因此不需要4个密钥来存储用户,而是创建一个包含4个密钥的字典,并存储/加载来自NSUserDefaults。但这只是一种分组信息和减少关键冲突的方法。