gpt4 book ai didi

class - 字典应该在 Swift 中转换为类还是结构?

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:31 26 4
gpt4 key购买 nike

我正在开发一个 native iOS 应用程序,它从我们也可以控制的网络服务接收 JSON 格式的数据。计划是在大约 18 个月内更换后端数据库以支持不同的平台。

考虑到这一点,我们希望确保 iOS 应用程序能够相对容易地适应新的数据源,特别是因为我们可能会更改通过 JSON 从服务器接收的关联数组中使用的键。

有两个目标:

  1. 为每个 PHP 请求创建一个位置,如果需要,可以在其中修改键。这将避免挖掘代码来查找类似 job["jobNumber"] 的内容。 .

  2. 清理我们现有的代码以消除像 job["jobNumber"] 这样的引用.

我们都是 Swift 的新手,没有 Objective-C 经验,但我认为 Struct 或 Class 适合创建像 job.jobNumber 这样的引用.

字典应该转换成类还是结构?示例代码表示采用 Dictionary<String, String> 的可重用方法如下所示并将其转换为推荐的类型将非常有帮助。

示例字典:

job = {
"jobNumber" : "1234",
"jobName" : "Awards Ceremony",
"client" : "ACME Productions"
}

期望的结果:

println("job name is \(job.name)")
// prints: job name is Awards Ceremony

最佳答案

要像这样访问它,您需要将字典转换为 Struct,如下所示:

编辑/更新:Swift 3.x

struct Job: CustomStringConvertible {
let number: Int
let name, client: String
init(dictionary: [String: Any]) {
self.number = dictionary["jobNumber"] as? Int ?? 0
self.name = dictionary["jobName"] as? String ?? ""
self.client = dictionary["client"] as? String ?? ""
}
var description: String {
return "Job#: " + String(number) + " - name: " + name + " - client: " + client
}
}

let dict: [String: Any] = ["jobNumber": 1234,
"jobName" : "Awards Ceremony",
"client" : "ACME Productions"]

let job = Job(dictionary: dict)
print(job.number) // 1234
print(job.name) // "Awards Ceremony"
print(job.client) // "ACME Productions"
print(job) // "Job#: 1234 - name: Awards Ceremony - client: ACME Productions"""

编辑/更新:

Swift 4 或更高版本您可以使用 JSON Codable 协议(protocol):

struct Job {
let number: Int
let name, client: String
}
extension Job: Codable {
init(dictionary: [String: Any]) throws {
self = try JSONDecoder().decode(Job.self, from: JSONSerialization.data(withJSONObject: dictionary))
}
private enum CodingKeys: String, CodingKey {
case number = "jobNumber", name = "jobName", client
}
}
extension Job: CustomStringConvertible {
var description: String {
return "Job#: " + String(number) + " - name: " + name + " - client: " + client
}
}

let dict: [String: Any] = ["jobNumber": 1234,
"jobName" : "Awards Ceremony",
"client" : "ACME Productions"]
do {
let job = try Job(dictionary: dict)
print(job.number) // 1234
print(job.name) // "Awards Ceremony"
print(job.client) // "ACME Productions"
print(job) // "Job#: 1234 - name: Awards Ceremony - client: ACME Productions\n"
} catch {
print(error)
}

关于class - 字典应该在 Swift 中转换为类还是结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com