使用 Swift 4 使带有 Float 的结构可编码
Making a Struct with a Float encodable with Swift 4
我有一个包含人物描述(身高、年龄、性别)的结构。年龄是浮点数,因为婴儿可以按月计算(即:1.083 岁是 13 个月)。
我正在尝试将这些人的数组保存为用户默认值,但无法弄清楚如何使 class 可编码。在 class 中是字符串、一个浮点数和一个字典 [String:String]。
建议?
结构:
import Foundation
struct Person: Codable {
var name: String
var gender: String
var age: Float
var profilePictures: [String: String]
init(name: String,
gender: String,
age: Float,
profilePictures: [String: String])
{
self.name = name
self.gender = gender
self.age = age
self.profilePictures = profilePictures
}
}
Class 我尝试将结果保存到用户默认值:
let defaults = UserDefaults.standard
defaults.set(self.people, forKey: "people") // Where self.people is an array of Person objects
您需要做的就是在解码数据时将一个人类型数组传递给json解码器。我建议与其将其保存到 UserDefaults 中,不如将数据写入 json 文件:
let person = Person(name: "devpreneur", gender: "male", age: 99, profilePictures: ["SO profile picture": "https://i.stack.imgur.com/Pz3pC.jpg"])
let people = [person]
do{
let peopleData = try JSONEncoder().encode(people)
// saving your people data
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let jsonURL = documentDirectory.appendingPathComponent("people.json")
try peopleData.write(to: jsonURL, options: .atomic)
// loading and decoding the json data
let loadedData = try Data(contentsOf: jsonURL)
let decodedPeople = try JSONDecoder().decode([Person].self, from: loadedData)
for person in decodedPeople {
print(person.name)
print(person.gender)
print(person.age)
print(person.profilePictures)
}
} catch {
print(error)
}
我有一个包含人物描述(身高、年龄、性别)的结构。年龄是浮点数,因为婴儿可以按月计算(即:1.083 岁是 13 个月)。
我正在尝试将这些人的数组保存为用户默认值,但无法弄清楚如何使 class 可编码。在 class 中是字符串、一个浮点数和一个字典 [String:String]。
建议?
结构:
import Foundation
struct Person: Codable {
var name: String
var gender: String
var age: Float
var profilePictures: [String: String]
init(name: String,
gender: String,
age: Float,
profilePictures: [String: String])
{
self.name = name
self.gender = gender
self.age = age
self.profilePictures = profilePictures
}
}
Class 我尝试将结果保存到用户默认值:
let defaults = UserDefaults.standard
defaults.set(self.people, forKey: "people") // Where self.people is an array of Person objects
您需要做的就是在解码数据时将一个人类型数组传递给json解码器。我建议与其将其保存到 UserDefaults 中,不如将数据写入 json 文件:
let person = Person(name: "devpreneur", gender: "male", age: 99, profilePictures: ["SO profile picture": "https://i.stack.imgur.com/Pz3pC.jpg"])
let people = [person]
do{
let peopleData = try JSONEncoder().encode(people)
// saving your people data
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let jsonURL = documentDirectory.appendingPathComponent("people.json")
try peopleData.write(to: jsonURL, options: .atomic)
// loading and decoding the json data
let loadedData = try Data(contentsOf: jsonURL)
let decodedPeople = try JSONDecoder().decode([Person].self, from: loadedData)
for person in decodedPeople {
print(person.name)
print(person.gender)
print(person.age)
print(person.profilePictures)
}
} catch {
print(error)
}