如何检查没有Swift Optionals的nil而没有打开它?

时间:2015-12-12 02:02:19

标签: swift

我知道安全展开如下

var firstName:String?

if let firstName = firstName
{
    dictionary.setObject(firstName, forKey: "firstName")
}
else 
{
    dictionary.setObject("", forKey: "firstName")
}

我想在字典中添加firstname,即使它也是nil。我将在字典中有10-15个var。 我不想为耳朵检查这种情况10-15次。 我在整个项目中拥有超过1000个选项。

因此,编写一个函数的想法将帮助我复制代码并减少行数。 所以实现了这个功能如下。

func checkNull(str:String) -> String
{
    return str.characters.count > 0 ? "\(str)" : ""
}

但在调用func时,

let addressstr = self.checkNull(address?.firstName)

firstname是这里的var in address模型。 汽车修正建议

let addressstr = self.checkNull((address?.firstName)!)

以上行导致崩溃。

1 个答案:

答案 0 :(得分:3)

首先firstNameOptional,因此您无法将其传递给只需String的函数。

另外这一行:

str.characters.count > 0 ? "\(str)" : ""

相当于只返回str,因此您不会检查它是否为Optional

解决方案

在这种情况下,使用nil coalescing operator

会更容易
let addressstr = address?.firstName ?? ""

如果address不是,则firstName将被解包并绑定到addressstr。否则,此字符串将分配给它:""