Swift:模型结构,使用可选项与空值的初始化

Posted

技术标签:

【中文标题】Swift:模型结构,使用可选项与空值的初始化【英文标题】:Swift: model structs, using optionals vs initialization of empty values 【发布时间】:2014-11-19 15:09:38 【问题描述】:

Swift 中,例如我有一个struct 用于此model

struct Message 
    var message: String = ""
    var timestamp: String = ""
    var id: String = ""

我将使用数据库中的struct 实例化多个Messages,然后用它们填充TableView

最好的做法是使用可选项而不是像这样用空字符串设置这些变量?

struct Message 
    var message: String?
    var timestamp: String?
    var id: String?

基本上将变量设置为nilempty string 会更有效吗? nilempty string 占用更少的内存吗?

【问题讨论】:

强烈推荐查看this问题。那里的答案给出了很好的解释。 【参考方案1】:

在考虑优化之前,您必须问自己一个好问题:Message 是否有可能包含其一个或多个属性的选项?如果是,请使用可选项,如果不是,请不要使用可选项。

然后,如果你想改进你的代码,你可以使用 memberwise initializer 作为你的struct:

struct Message 
    var message: String
    var timestamp: String?
    var id: String


let message = Message(message: "Some message", timestamp: nil, id: "Id14")

最后,我怀疑Struct 上的任何内存优化(带有可选或非可选属性)会给您的应用/项目带来任何显着的改进。

【讨论】:

问自己的好问题。就我而言,我认为nil 没有机会,因为它们将来自数据库。我宁愿在我的数据库中保留空/默认值而不是null。感谢您的帮助!【参考方案2】:

尽可能避免使用可选项。存储的属性并不像在 Objective-c 中那样神奇。如果合适,只需给它们默认值。

【讨论】:

optionals 在许多情况下为您提供了很大的灵活性。没有必要初始化虚拟空字符串。 而且它们也使逻辑复杂化。

以上是关于Swift:模型结构,使用可选项与空值的初始化的主要内容,如果未能解决你的问题,请参考以下文章

swift 可选项(Optional)

pandas中表的合并与空值的使用

可选链与空值合并

Swift - 使用 init 初始化模型对象(来自解码器:)

使用 SwiftyJSON 的 Swift 可失败初始化器

观察 Swift 结构体的变化