这只是一个例子来说明我想要实现的目标。
我想检查一个可选项是否包含一个值,如果它是否大于0.我现在有这样的方式:
if let value = Double(textFieldText) {
if value > 0 {
return true
}
}
有没有办法在一条线上实现这一目标?类似的东西:
if let value = Double(textFieldText) && value > 0{
return true
}
答案 0 :(得分:9)
您可以使用where
子句:
if let value = Double(textFieldText) where value > 0 {
使用nil coalescing operator的另一个选项:
if Double(textFieldText) ?? -Double.infinity > 0 {
感谢下面的评论让我意识到nil > 0
不会抛出错误:
if Double(textFieldText) > 0 {
是迄今为止最简单的选择。
答案 1 :(得分:6)
我认为编写逻辑的最简单方法是
return Double(textFieldText) > 0
func foo(textFieldText:String) -> Bool {
return Double(textFieldText) > 0
}
foo("1") // true
foo("-1") // false
foo("a") // false
foo("0") // false
foo("123a") // false
当在Swift中比较2个值并且(确切地)其中一个值为nil
时,nil
总是小于另一个值。
因此每次Double
的初始化失败时都会失败,就像这里
return Double("a") > 0
表达式变为
return nil > 0
是false
。
表达式返回true
的唯一方法是将输入字符串解析为Double
值,该值实际上大于0
。
这正是您寻找的逻辑:)
答案 2 :(得分:4)
使用where子句:
if let value = Double(textFieldText) where value > 0 {
return true
}
或者简单地说:
if Double(textFieldText) > 0 {
return true
}
答案 3 :(得分:2)
另一种方法是你可以做同样的事情,如果让我们筑巢,你会引导你远离丑陋。
func hello(values:String) -> Bool {
guard let value = Double(values) where value > 0 else {
return false
}
return true
}
答案 4 :(得分:0)
试试这个。
if let value = textFieldText as? Double where value > 0 {
return true
}