如果在swift内部什么都不做

时间:2014-12-26 01:42:29

标签: swift

我想知道if语句内部,我可以使用像Python pass这样的内容吗?

var num = 10
num > 5 ? doSomethingIfTrue(): doSomethingIfFalse()

如果提供了true和false方法,上面的代码就可以了。 如果我只想执行真正的方法怎么办? 如:

num > 5 ? doSomethingIfTrue(): ***pass***

我希望在swift中有类似pass语句的内容,所以如果返回false,程序将继续执行。我尝试过continuefallthrough,但我猜它们只在循环语句中使用。

4 个答案:

答案 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()并让它什么都不做,或者打印出我们什么也没做。