在我目前某些地方的模型代码中,我正在做
var optionalString : String?
在某些地方
var otherString : String = ""
当它是一个可选项并且我正在打开它时,我很害怕它不应该是nil而只是为了安全起见我
let newString = optionalString ?? ""
使用选项,我需要打开并执行零检查。它使代码的可读性降低。
String应该是模型中的可选项吗?它必须是一个场景吗?
答案 0 :(得分:2)
当缺少值(字符串)与空值具有不同的语义时,使用选项。
简单示例:
密码可以是
这里,"未设置"案件的处理方式必须与" empty"情况下。
当模型逻辑与空字符串和缺少字符串不同时,您应该只使用选项。集合类型(数组,字典)也是如此。
答案 1 :(得分:1)
IMO,字符串选项和空字符串有时是可互换的。
假设我们有一个人类,它有一个name
属性。在这种情况下,一个人必须有一个名字,所以可选和空字符串是可互换的(你也可以使用)。您可以使用nil
或""
表示某人没有姓名。他们的意思是一样的。您也可以声明一个常量:
let NoName = ""
你可以用这个非常抽象的常量检查它,而不是nil
,这有点不那么抽象。
另一方面,有时您必须使用可选项。这就是nil
和""
在上下文中具有不同含义的情况。让我们使用我们的人员类来说明这一点。 person类有一个名为dogName
的属性。如果他/她没有狗,那就是nil
。如果他/她有一只狗,但没有给它起名字,那就是一个空字符串。如果他/她有一只狗,并给它一个名字,它将是"fido"
或其他一些名字。在这种情况下,nil
表示他/她没有狗,""
表示他/她的狗没有名字。他们有不同的含义!
结论:当nil和空字符串具有相同含义时,请使用可选的可选项。当nil和空字符串具有不同含义时,请使用optional。