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)