什么时候应该使用可选值,什么时候应该使用默认值的非可选值?

When should I use optionals and when should I use non-optionals with default values?

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

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

但有时我看到其他开发人员是这样写代码的:

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

这是不推荐的方法吗,因为每当您有 nil 时,您就会崩溃并且没有恢复的出口。那正确吗?或者在某些用例中,使用默认的非可选值可能会很好。如果有那么在哪里?

我看到了另一个 question,它询问的是效率,而不是哪个更适合您的需求。我正在寻找一个答案,上面写着 "This is a good place to use non-optionals and this is a good place to use optionals". 有时我看到人们到处乱扔可选项,这让我觉得我们永远不需要非可选项吗?有时我看到人们试图尽可能地避免使用可选项,而只是以 Objective-C 的风格编写代码。

上述问题的答案并不代表非可选值好的有效案例。它对此保持沉默。至于选择选项:我猜测对于通过网络调用填充的模型,选项是正确的选择,因为你不知道它是否是 nil

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

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

选择取决于您的模型。

如果您建模的对象的 属性 可能完全不存在,例如一个中间名,一个名字后缀,一个替代的 phone 号码等等,它应该用一个可选的来建模。 nil 选项告诉您 属性 不存在 - 即一个人没有中间名或替代 phone 号码。当你必须区分空对象和缺失对象时,你也应该使用可选的。

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

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

如果您 class 的用户需要更改分隔符,他们有办法做到这一点。但是,如果他们不关心分隔符,他们可以继续使用默认值而无需在自己的代码中提及它。