我什么时候应该在我的模型中使用可选字符串?

时间:2016-01-11 08:01:19

标签: ios swift optional

在我目前某些地方的模型代码中,我正在做

var optionalString : String?

在某些地方

var otherString : String = ""

当它是一个可选项并且我正在打开它时,我很害怕它不应该是nil而只是为了安全起见我

let newString = optionalString ?? ""

使用选项,我需要打开并执行零检查。它使代码的可读性降低。

String应该是模型中的可选项吗?它必须是一个场景吗?

2 个答案:

答案 0 :(得分:2)

当缺少值(字符串)与空值具有不同的语义时,使用选项。

简单示例:

密码可以是

  • 设置为某个字符串
  • 尚未设定。

这里,"未设置"案件的处理方式必须与" empty"情况下。

当模型逻辑与空字符串和缺少字符串不同时,您应该只使用选项。集合类型(数组,字典)也是如此。

答案 1 :(得分:1)

IMO,字符串选项和空字符串有时是可互换的。

假设我们有一个人类,它有一个name属性。在这种情况下,一个人必须有一个名字,所以可选和空字符串是可互换的(你也可以使用)。您可以使用nil""表示某人没有姓名。他们的意思是一样的。您也可以声明一个常量:

let NoName = ""

你可以用这个非常抽象的常量检查它,而不是nil,这有点不那么抽象。

另一方面,有时您必须使用可选项。这就是nil""在上下文中具有不同含义的情况。让我们使用我们的人员类来说明这一点。 person类有一个名为dogName的属性。如果他/她没有狗,那就是nil。如果他/她有一只狗,但没有给它起名字,那就是一个空字符串。如果他/她有一只狗,并给它一个名字,它将是"fido"或其他一些名字。在这种情况下,nil表示他/她没有狗,""表示他/她的狗没有名字。他们有不同的含义!

结论:当nil和空字符串具有相同含义时,请使用可选的可选项。当nil和空字符串具有不同含义时,请使用optional。