UserDefaults 保存字典数组
UserDefaults saving array of dictionaries
我正在尝试将字典保存到 UserDefaults 中,然后我想获取数据或删除。
class userDefaultsManager {
static func getAllUsers()->[UserModel]{
if let all = UserDefaults.standard.array(forKey: "usersKey") as? [Dictionary<String,Any>] {
return all.map{UserModel.init(dictionary: [=10=])}
}
return []
}
static func insertUser(name:String, email:String)->Bool {
let newUserModel = UserModel.init(name: name, email: email)
var all = getAllUser()
all.append(newUserModel)
UserDefaults.standard.set(all.map{[=10=].dictionary}, forKey: "usersKey")
return UserDefaults.standard.synchronize()
}
static func deleteUser(email:String)->Bool {
var all = getAllUser()
let index = all.index{[=10=].email == email}
if index != nil {
all.remove(at: index!)
UserDefaults.standard.set(all.map{[=10=].dictionary}, forKey: "usersKey")
UserDefaults.standard.synchronize()
return true
} else {
return false
}
}
}
class UserModel:NSObject{
var name: String!
var email: String!
init(name:String, email:String) {
self. name = name
self. email = email
super.init()
}
init(dictionary:[String:Any]) {
self.name = ""
self.email = ""
super.init()
self.setValuesForKeys(dictionary)
}
var dictionary:[String:Any] {
return self.dictionaryWithValues(forKeys: ["name","email"]) //Error here
}
}
代码在 swift 3 上运行,但我在 var dictionary:[String:Any]
上遇到 swift 4 错误
这里是错误:
implicit Objective-C entrypoint -[Myapp.UserModel name] is
deprecated and will be removed in Swift 4
如有任何帮助解决此问题,我们将不胜感激。
你的类继承自NSObject,并使用objc KVC,这对Swift3来说没问题,因为Swift3默认将所有NSObject子类假定为@objc,在Swift4中你需要声明你的访问器 @objc 使它们可用于 obj-c KVC 操作。
https://forums.developer.apple.com/thread/81789
我正在尝试将字典保存到 UserDefaults 中,然后我想获取数据或删除。
class userDefaultsManager {
static func getAllUsers()->[UserModel]{
if let all = UserDefaults.standard.array(forKey: "usersKey") as? [Dictionary<String,Any>] {
return all.map{UserModel.init(dictionary: [=10=])}
}
return []
}
static func insertUser(name:String, email:String)->Bool {
let newUserModel = UserModel.init(name: name, email: email)
var all = getAllUser()
all.append(newUserModel)
UserDefaults.standard.set(all.map{[=10=].dictionary}, forKey: "usersKey")
return UserDefaults.standard.synchronize()
}
static func deleteUser(email:String)->Bool {
var all = getAllUser()
let index = all.index{[=10=].email == email}
if index != nil {
all.remove(at: index!)
UserDefaults.standard.set(all.map{[=10=].dictionary}, forKey: "usersKey")
UserDefaults.standard.synchronize()
return true
} else {
return false
}
}
}
class UserModel:NSObject{
var name: String!
var email: String!
init(name:String, email:String) {
self. name = name
self. email = email
super.init()
}
init(dictionary:[String:Any]) {
self.name = ""
self.email = ""
super.init()
self.setValuesForKeys(dictionary)
}
var dictionary:[String:Any] {
return self.dictionaryWithValues(forKeys: ["name","email"]) //Error here
}
}
代码在 swift 3 上运行,但我在 var dictionary:[String:Any]
这里是错误:
implicit Objective-C entrypoint -[Myapp.UserModel name] is deprecated and will be removed in Swift 4
如有任何帮助解决此问题,我们将不胜感激。
你的类继承自NSObject,并使用objc KVC,这对Swift3来说没问题,因为Swift3默认将所有NSObject子类假定为@objc,在Swift4中你需要声明你的访问器 @objc 使它们可用于 obj-c KVC 操作。 https://forums.developer.apple.com/thread/81789