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

标签 swift overloading operator-keyword

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

相关文章:

c++ - 前向迭代器的重载

java - 如何在 Jersey/Spring 中使用 @QueryParam 重载方法?

f# - 重载取消引用 (!) 和赋值 ( :=) operators in f#

c++ - 有趣的问题运算符重载

ios - 计数查询核心数据谓词

swift - iPhone 中 https 连接中连接失败或无响应之间的区别

ruby-on-rails - 从作为引擎安装的 gem 重载 lib 文件

c++ - 无法将 'std::basic_ostream' 左值绑定(bind)到 'std::basic_ostream<char>&&'

ios - Swift 类中的自定义初始化给出 'property not initialized at implicitly generated super.init call' 错误?

ios - 在 Swift 中使用未声明的类型 'UIImage'