我的服务器以 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/