我正在尝试使用inline if条件如下:
topDisplay.text!.rangeOfString(".") != nil ? call function A : call function B
这里的想法是,如果"."
中有topDisplay.text!
,则调用函数A,否则调用函数B.如果没有“。”,方法rangeOfString
将返回nil。找到了。所以我想知道是否可以在内联条件表达式中检查nil并同时进行函数调用。
答案 0 :(得分:0)
你的代码是正确的,假设你把调用放在那里的实际函数,即:
func functionA() -> String { return "A" }
func functionB() -> String { return "B" }
topDisplay.text?.rangeOfString(".") != nil ? functionA() : functionB()
如果您收到错误消息,最可能的原因是functionA
和functionB
返回不同的类型:
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错误消息样式中,这会导致错误的有效!=
比较,而不是A
和B
返回不兼容类型的问题。
但是,如果您没有在代码中显示结果的分配,我怀疑您实际上是想要为副作用运行这些函数而不是它们返回的值。如果是这种情况不要这样做。 ?:
运算符用于评估两种可能性作为表达式。如果您想要副作用,请使用if
:
if topDisplay.text?.rangeOfString(".") != nil {
sideEffectfulFunctionA()
}
else {
sideEffectfulFunctionB()
}