我一直在尝试整个早上在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 可选值“
所以你能提供最简洁的工作方法,只包括它存在的字符串
答案 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
}