gpt4 book ai didi

json - 如何使用 JSON 中的嵌套类型在 Swift 中表示字典

转载 作者:行者123 更新时间:2023-11-30 10:01:45 25 4
gpt4 key购买 nike

假设我正在解析 JSON 并且需要将其转换为 Swift 字典。如果您注意到下面的内容,就会发现该类型是相当嵌套的。有一个帐户键,其值是另一个映射,具有嵌套数组等。我看过很多帖子建议 AnyObject?或任何?这样做的正确方法是什么?一个完整的例子就太好了。我正在使用 Alamofire/SwiftyJSON。谢谢!

    {
"id": "20o2k2jlkja08a08",
"username": "catlover",
"accounts": {
"verified_email": "false",
"identities": [{
"network": "facebook",
"token": "alkdjlaksjsak",
"avatar": "avatarUrl"
}, {
"network": "twitter",
"token": "alkdjlaksjsak",
"avatar": "avatarUrl"
}]
},
"followers": "100",
"following": "20"
}

最佳答案

我建议您查看ObjectMapperAlamofireObjectMapper框架,都可以在 Cocoapods 上使用。有了它们,从 JSON 到 Swift 对象的映射真的很容易。

首先,定义 JSON 如何映射到您的对象:

import ObjectMapper

class User: Mappable {
var id: String?
var username: String?
var accounts: UserAccount?
var followers: Int?
var following: Int?

required init?(_ map: Map) { /* validate your JSON, etc */ }

func mapping(map: Map) {
self.id <- map["id"]
self.username <- map["username"]
self.accounts <- map["accounts"]
self.followers <- map["followers"]
self.following <- map["following"]
}
}

class UserAccount: Mappable {
var verifiedEmail: Bool?
var identities: [UserIdentity]?

required init?(_ map: Map) { }

func mapping(map: Map) {
self.verifiedEmail <- map["verified_email"]
self.identities <- map["identities"]
}
}

class UserIdentity: Mappable {
var network: String?
var token: String?
var avatar: NSURL?

required init?(_ map: Map) { }

func mapping(map: Map) {
self.network <- map["network"]
self.token <- map["token"]
self.avatar <- (map["avatar"], URLTransform())
}
}

用法:

Alamofire.request(.GET, url)
.responseObject { (response: Response<User, NSError>) in
let user = response.result.value

// Get the url to the user's avatar
let avatarURL = user?.accounts?.identities?.first?.avatar
}

如果您想避免所有这些 ?,只需为您的属性指定一个默认值即可。当然,只有当该属性保证出现在 JSON 中时,这才有意义:

class User: Mappable {
var id = ""
var username = ""
var accounts = UserAccount()
var followers = 0
var following = 0

...
}

关于json - 如何使用 JSON 中的嵌套类型在 Swift 中表示字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38131711/

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