如何将数据保存在文件 swift 中并使用 UserDefault 加载
How to save data in a file swift and load with UserDefault
我已经从 JSON API 获得了数据。所以我想保存数据配置文件然后加载如果我想使用它。
这是我的代码解析json
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
//create json object from data
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print(json)
// handle json...
}
DispatchQueue.main.async(
execute:self.LoginDone
)
}
} catch let error {
print(error.localizedDescription)
}
})
task.resume()
在
print(json)
我将获取名称、地址等数据配置文件,因此,我将保存它然后加载
但我想用另一个文件保存它。
让我们创建一个用户对象,遵循 NSCoding
协议并实现 decode
和 encode
功能,如下所示:
class User: NSObject, NSCoding {
var name: String!
var address: String!
init(name: String, address: String) {
self.name = name
self.address = address
}
func encode(with aCoder: NSCoder) {
if let name = name {
aCoder.encode(name, forKey: "name")
}
if let address = address {
aCoder.encode(address, forKey: "address")
}
}
required init?(coder aDecoder: NSCoder) {
if aDecoder.containsValue(forKey: "name") {
self.name = aDecoder.decodeObject(forKey: "name") as! String
}
if aDecoder.containsValue(forKey: "address") {
self.address = aDecoder.decodeObject(forKey: "address") as! String
}
}
}
现在,您可以保存和检索用户:
let user = User(name: "Danh", address: "1234 XYZ st")
// save user
let data = NSKeyedArchiver.archivedData(withRootObject: user)
UserDefaults.standard.set(data, forKey: "user")
// retrieve user
if let data = UserDefaults.standard.value(forKey: "user") as? Data,
let user = NSKeyedUnarchiver.unarchiveObject(with: data) as? User {
print("name: \(user.name), address: \(user.address)")
}
我已经从 JSON API 获得了数据。所以我想保存数据配置文件然后加载如果我想使用它。
这是我的代码解析json
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
//create json object from data
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print(json)
// handle json...
}
DispatchQueue.main.async(
execute:self.LoginDone
)
}
} catch let error {
print(error.localizedDescription)
}
})
task.resume()
在
print(json)
我将获取名称、地址等数据配置文件,因此,我将保存它然后加载 但我想用另一个文件保存它。
让我们创建一个用户对象,遵循 NSCoding
协议并实现 decode
和 encode
功能,如下所示:
class User: NSObject, NSCoding {
var name: String!
var address: String!
init(name: String, address: String) {
self.name = name
self.address = address
}
func encode(with aCoder: NSCoder) {
if let name = name {
aCoder.encode(name, forKey: "name")
}
if let address = address {
aCoder.encode(address, forKey: "address")
}
}
required init?(coder aDecoder: NSCoder) {
if aDecoder.containsValue(forKey: "name") {
self.name = aDecoder.decodeObject(forKey: "name") as! String
}
if aDecoder.containsValue(forKey: "address") {
self.address = aDecoder.decodeObject(forKey: "address") as! String
}
}
}
现在,您可以保存和检索用户:
let user = User(name: "Danh", address: "1234 XYZ st")
// save user
let data = NSKeyedArchiver.archivedData(withRootObject: user)
UserDefaults.standard.set(data, forKey: "user")
// retrieve user
if let data = UserDefaults.standard.value(forKey: "user") as? Data,
let user = NSKeyedUnarchiver.unarchiveObject(with: data) as? User {
print("name: \(user.name), address: \(user.address)")
}