这是在Swift中检查选项的最简洁方法吗?

时间:2018-06-08 10:32:34

标签: ios swift

我一直在尝试整个早上在Swift中研究选项,我知道有很多堆栈溢出帖子,但似乎都没有正确澄清

对于以下代码,这是验证可选项的 最简洁 方式吗?

let overlays:String = "overlays=" + self.preferences.string(forKey: "overlays")! == nil ? "" : self.preferences.string(forKey: "overlays")!

注意,我似乎可以做到

if( self.preferences.string(forKey:="overlays" != nil) {
    //do something
}

然而,在我看来,这不那么简洁和可读。

编辑:原来,我甚至没有正确处理nil,因为我得到了

  

“线程1:致命错误:在展开时出乎意料地发现nil   可选值“

所以你能提供最简洁的工作方法,只包括它存在的字符串

2 个答案:

答案 0 :(得分:3)

你所做的是被迫展开。如果let或guard让我们选择处理,你必须使用。

if let a = self.preferences.string(forKey: "overlays"), let b = self.preferences.string(forKey: "overlays") {
    let overlays:String = "overlays=\(a)\(b)" +  
}

答案 1 :(得分:0)

此处let overlays:String = "overlays=" + self.preferences.string(forKey: "overlays")! == nil ? "" : self.preferences.string(forKey: "overlays")!会崩溃,因为+有更多偏好,然后==。所以它先做"overlays=" + self.preferences.string(forKey: "overlays")!然后将它与总是失败的nil进行比较。如果self.preferences.string(forKey: "overlays")!返回nil,则app会崩溃。

您可以尝试:

var overlays:String = "overlays="
if let value = self.preferences.string(forKey: "overlays") {
    overlays = overlays + value
}