我何时应该使用选项?何时应该使用具有默认值的非选项?

时间:2017-05-31 15:12:01

标签: swift optional code-structure

我知道Swift中推荐的方法是使用:

class Address {
var firstLine : String?
var secondLine : String?
}

但有时我会看到其他开发人员以这种方式编写代码:

class Address {
var firstLine : String = ""
var secondLine : String = ""
}

这是否是一种未经推荐的方式,因为无论何时nil,您都会崩溃,而且您无法恢复。是对的吗?或者有一些使用非默认选项的用例可能很好。如果是,那么在哪里?

我看到了另一个question,它询问效率而不是更适合您的需求。我正在寻找一个答案,它说"这是一个使用非选项的好地方,这是一个使用选项的好地方"。有时我看到大家只是在任何地方转储选项,这让我觉得我们不需要非选项吗?有时我会看到人们试图尽可能地避免使用选项,而只是采用Objective-C风格的代码。

上述问题的答案并不代表非选择权益良好的有效案例。对此不屑一顾。至于选择选项:我猜测通过网络电话填充的模型,选项是正确的选择,因为你不知道它是否nil

2 个答案:

答案 0 :(得分:7)

选择取决于你的模特。

如果您建模的对象的属性可能完全不存在,例如中间名,姓名后缀,备用电话号码等,应使用可选项进行建模。 nil可选项告诉您该属性不存在 - 即某人没有中间名或其他电话号码。当您必须区分空对象和缺失对象时,您还应该使用可选项。

如果必须设置对象的属性,并且该属性具有有意义的默认值,请使用带有默认值的非可选对象:

class AddressList {
    var addresses : [Address]
    var separator : String = ";"
    ...
}

如果您班级的用户需要更改分隔符,他们就可以这样做。但是,如果他们不关心分隔符,他们可以继续使用默认值而不在自己的代码中提及它。

答案 1 :(得分:0)

如果您认为变量可能没有值,那么您应该使用选项。但如果您确定它会有价值,那么您就不需要使用它们。

因此,如果您确定变量将具有值,则仅使用非期权,否则使用期权。