微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字典是否应该转换为Swift中的类或结构?

我正在开发一个本机iOS应用程序,它从我们也可以控制的Web服务接收 JSON格式的数据.计划是在18个月内改变后端数据库,转而采用不同的平台.

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

有两个目标:

>为每个PHP请求创建一个位置,如果需要,可以修改密钥.这样可以避免挖掘代码来查找job [“jobNumber”]之类的内容.
>清理我们现有的代码,以消除诸如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: String
    let 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"""

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐