在 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()
如果您收到错误消息,最可能的原因是 functionA
和 functionB
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 错误消息样式中,这会给您关于有效 !=
比较的错误,而不是关于 A
和 B
[=30= 的问题]ing 不兼容的类型。
但是,鉴于您没有在代码中显示结果的赋值,我怀疑您实际上想要 运行 这些函数是为了它们的副作用,而不是为了它们的价值 return.如果是这种情况不要这样做。 ?:
运算符用于评估作为表达式的两种可能性。如果你想要副作用,请使用 if
:
if topDisplay.text?.rangeOfString(".") != nil {
sideEffectfulFunctionA()
}
else {
sideEffectfulFunctionB()
}
我正在尝试使用 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()
如果您收到错误消息,最可能的原因是 functionA
和 functionB
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 错误消息样式中,这会给您关于有效 !=
比较的错误,而不是关于 A
和 B
[=30= 的问题]ing 不兼容的类型。
但是,鉴于您没有在代码中显示结果的赋值,我怀疑您实际上想要 运行 这些函数是为了它们的副作用,而不是为了它们的价值 return.如果是这种情况不要这样做。 ?:
运算符用于评估作为表达式的两种可能性。如果你想要副作用,请使用 if
:
if topDisplay.text?.rangeOfString(".") != nil {
sideEffectfulFunctionA()
}
else {
sideEffectfulFunctionB()
}