在Swift中的内联条件表达式中调用函数

时间:2015-05-22 10:50:22

标签: function swift null inline

我正在尝试使用inline if条件如下:

topDisplay.text!.rangeOfString(".") != nil ? call function A : call function B

这里的想法是,如果"."中有topDisplay.text!,则调用函数A,否则调用函数B.如果没有“。”,方法rangeOfString将返回nil。找到了。所以我想知道是否可以在内联条件表达式中检查nil并同时进行函数调用。

1 个答案:

答案 0 :(得分:0)

你的代码是正确的,假设你把调用放在那里的实际函数,即:

func functionA() -> String { return "A" }
func functionB() -> String { return "B" }

topDisplay.text?.rangeOfString(".") != nil ? functionA() : functionB()

如果您收到错误消息,最可能的原因是functionAfunctionB返回不同的类型:

func functionA() -> String { return "A" }
func functionB() -> Int { return 1 }

// error: could not find an overload for '!=' that accepts the supplied arguments
topDisplay.text?.rangeOfString(".") != nil ? functionA() : functionB()

在经典的Swift错误消息样式中,这会导致错误的有效!=比较,而不是AB返回不兼容类型的问题。

但是,如果您没有在代码中显示结果的分配,我怀疑您实际上是想要为副作用运行这些函数而不是它们返回的值。如果是这种情况不要这样做?:运算符用于评估两种可能性作为表达式。如果您想要副作用,请使用if

if topDisplay.text?.rangeOfString(".") != nil {
    sideEffectfulFunctionA()
}
else {
    sideEffectfulFunctionB()
}