当前位置:  开发笔记 > 前端 > 正文

Swift:使用Failable Initializer从JSON创建模型类

如何解决《Swift:使用FailableInitializer从JSON创建模型类》经验,为你挑选了1个好方法。



1> Luca Angelet..:

这就是我通常使用可用的初始化程序定义模型类型的方法.

struct Person {
    let firstName: String
    let middleName: String?

    init?(JSONData data:[String:AnyObject]) {
        guard let firstName = data["firstName"] as? String else { return nil }
        self.firstName = firstName
        self.middleName = data["middleName"] as? String
    }
}

为何选择Struct?

正如您所看到的,我使用Struct而不是Class,至少有两个重要原因:

failable initializers使用结构更好地工作,因为您可以在nil不初始化所有存储属性的情况下返回

它们更快(因为保存在堆栈而不是堆上)

为什么守卫让?

我也更喜欢使用该guard let构造,因为它清楚地表明,如果未检索到某些强制值,则初始化必须失败.

更多

我的初始化程序版本不需要middleName.我决定这样做因为你定义middleName为可选的.但是,如果您想middleName强制改变Person,如下所示

struct Person {
    let firstName: String
    let middleName: String

    init?(JSONData data:[String:AnyObject]) {
        guard let
            firstName = data["firstName"] as? String,
            middleName = data["middleName"] as? String else { return nil }
        self.firstName = firstName
        self.middleName = middleName
    }
}

等等,结构是值类型!我会为每份副本浪费大量内存?

不!

[...] Swift只在必要时才在幕后执行实际复制.Swift管理所有值复制以确保最佳性能,您不应该避免分配以尝试抢占此优化.

Swift编程语言

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有