Swift : 可以将 randomVar 重载为吗? [我的结构]?
Swift : Possible to overload randomVar as? [MyStruct]?
我的服务器 returns 一组照片信息 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 个原始照片数组),有没有办法 "overload" as? [Photo]
在 Photo 结构中使用我的 init?(fromRaw:)
,这样我们就可以编写代码:
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)
我的服务器 returns 一组照片信息 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 个原始照片数组),有没有办法 "overload" as? [Photo]
在 Photo 结构中使用我的 init?(fromRaw:)
,这样我们就可以编写代码:
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)