swift – 我可以从自定义init方法调用struct default memberwise init吗?

如果我创建一个没有init的swift结构,那么我可以调用编译器生成认成员初始化器,如下所示:
struct OrderFill {
    let price:Int
    let qty: Int
    let timeStamp: NSDate
}
let o = OrderFill(price: 2,qty: 1,timeStamp: someDate)

我想要做的是创建一个方便的init方法来从字典中反序列化,然后字典链接认的成员init。就像是

struct OrderFill {
    let price:Int
    let qty: Int
    let timeStamp: NSDate

    init(dict:[String:AnyObject]) throws {
        self.init(
            price: dict["price"] as! Int
            qty: dict["qty"] as! Int
            timeStamp: try parseDate(dict["ts"] as! String)
    }
}
let o = OrderFill(someDict)

当我尝试编写这段代码时,编译器(Xcode 7.2)在调用中给出了错误“额外参数’数量’,好像它没有看到认的成员并试图递归调用init(字典)

我可以编写自己的成员init,或者我可以直接从我的init(字典)中分配属性,但如果我可以链接调用它会很好。有没有办法在swift中这样做?

添加自己的初始化程序作为结构的扩展。扩展无法删除现有功能,因此它将保留struct的认初始值设定项。
struct OrderFill {
    let price: Int
    let qty: Int
    let timeStamp: NSDate
}

extension OrderFill {

    init(dict: [String: AnyObject]) throws {
        self.init(
            price: dict["price"] as! Int,qty: dict["qty"] as! Int,timeStamp: try parseDate(dict["ts"] as! String)
        )
    }
}

let o = OrderFill(someDict)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...