swift – 我可以从自定义init方法调用struct default memberwise
发布时间:2020-12-14 05:49:37 所属栏目:百科 来源:网络整理
导读:如果我创建一个没有init的swift结构,那么我可以调用编译器生成的默认成员初始化器,如下所示: struct OrderFill { let price:Int let qty: Int let timeStamp: NSDate}let o = OrderFill(price: 2,qty: 1,timeStamp: someDate) 我想要做的是创建一个方便的
如果我创建一个没有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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |