使用 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)
}