gpt4 book ai didi

swift : Possible to overload randomVar as? [MyStruct]?

转载 作者:行者123 更新时间:2023-11-28 13:40:44 25 4
gpt4 key购买 nike

我的服务器以 JSON 格式返回一组照片信息:

"pics":[{"ID":182,"ID_member":39,"fn":"b69ea6f6c88b58c67a331aa3c5eaff81.jpg"}, ...]

我有一个结构初始化函数来处理一张照片 json 原始数组(来自 [String:Any] 类型):

init?(fromRaw _img:[String:Any]?)
{
guard
let img = _img,
let id = img["ID"] as? Int,
let idm = img["ID_member"] as? Int,
let fn = img["fn"] as? String
else
{
OOTLog.info("Warning : unable to init from photo raw array")
return nil ;
}


self.id = id
self.idMembre = idm
self.fileName = fn

}

我的问题是:假设我们有一个来自服务器的 json(类型为 [[String:Any]],包含 n 个原始照片的数组),有没有办法“重载”as? [Photo] 与我的 init?(fromRaw:) 在 Photo 结构中,因此我们可以编写代码:

guard let arrayPhoto = jsonRaw as? [Photo] else ..

代替:

guard let arrayPhotoRaw = jsonRaw as [[String:Any]] else .. 
let photoArray:[Photo] = []
for p in jsonRaw {
guard let p = Photo(fromRaw:p) else { continue }
photoArray.append(p)
}

最佳答案

更好用

struct Root: Codable {
let pics: [Pic]
}

struct Pic: Codable {
let id, idMember: Int
let fn: String

enum CodingKeys: String, CodingKey {
case id = "ID"
case idMember = "ID_member"
case fn
}
}

 let res = try! JSONDecoder().decode(Root.self, from:data)
print(res.pics)

关于 swift : Possible to overload randomVar as? [MyStruct]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064727/

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