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

Calling function within inline condition expression in Swift

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

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

这里的思路是如果topDisplay.text!中有"."则调用函数A,否则调用函数B。方法,rangeOfString,returns nil如果不 ”。”被发现。所以我想知道是否可以在内联条件表达式中检查 nil 并同时进行函数调用。

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

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

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

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

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 [=30= 的问题]ing 不兼容的类型。

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

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