我想知道if
语句内部,我可以使用像Python pass
这样的内容吗?
var num = 10
num > 5 ? doSomethingIfTrue(): doSomethingIfFalse()
如果提供了true和false方法,上面的代码就可以了。 如果我只想执行真正的方法怎么办? 如:
num > 5 ? doSomethingIfTrue(): ***pass***
我希望在swift中有类似pass
语句的内容,所以如果返回false,程序将继续执行。我尝试过continue
和fallthrough
,但我猜它们只在循环语句中使用。
答案 0 :(得分:7)
理论上,你可以这样说:
var num = 10
num > 5 ? doSomethingIfTrue() : ()
这是有效的,因为()
是一个无效声明。
但我不会这样做!我会这样写:
var num = 10
if num > 5 { doSomethingIfTrue() }
是的,这是更多的角色,但那是斯威夫特;你不能省略if结构中的花括号。而你的三元运营商是错误的运营商。正如其他人所指出的那样,它最适合条件分配和类似的。
真的,这是一个适应这个语言的语法,操作符和流控制的问题。不要试图让Swift像Python一样;它不会。
答案 1 :(得分:1)
?:
条件运算符期望其三个操作数中的每一个都有一个值,因为它需要返回一个值。假设你有假设的
a = b + ((c > 0) ? 1 : pass)
如果+
不是正面的话,您期望c
做什么?
对于语句,请使用if
,如下所示:
if num > 5 {
doSomethingIfTrue()
}
答案 2 :(得分:1)
我同意其他答案,这可能是最好避免的,因为三元运算符的目的是在两种情况下评估值 - 你真的只想要一个if
。
但是,如果您真的想这样做,可以将doSomethingIfTrue()
的空白返回类型与()
匹配。
尽管如此,这并非通用。如果doSomethingIfTrue()
没有返回void,而是返回了Int
,则无效。您必须使用0
或类似的东西。
这将有效(取决于您的工作定义):
let pass: Any = ()
func doSomething() { }
func doSomethingElse() -> String { return "a" }
func doSomethingNumeric() -> Int { return 1 }
var num = 5
num > 5 ? doSomething() : pass
num > 5 ? doSomethingElse() : pass
num > 5 ? doSomethingNumeric() : pass
如果您使用这些表达式返回的值,它们将是Any
。
不要使用它: - )
答案 3 :(得分:0)
为什么在三元语句中使用三元运算符作为空的else?它复杂得多,效率低下。试试这个:
var num = 10
if num > 5 {
println("hi")
}
var num = 10
num > 5 ? doSomethingIfTrue(): pass()
创建pass()并让它什么都不做,或者打印出我们什么也没做。