Ваш код правильный, если вы поместите вызовы фактических функций там, а именно:
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()
}
возможно дубликат [Инлайн, если состояние с нулем в стриже] (http://stackoverflow.com/questions/30392878/inline-if-condition-with-nil -in-swift) – Moritz
topDisplay.text! .rangeOfString (".")? functionA(): functionB() Выше выражение просто не компилировалось. Все должно быть изменено? – Yao
Первым делом следует использовать 'rangeOfString (". ")! = Nil? ... 'как было предложено в ответе на ваш предыдущий вопрос ... –