2015-05-22 2 views
0

Я пытаюсь использовать встроенные если условие следующим образом:Вызов функции в выражении рядный условия в Swift

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

Идея заключается в том, есть ли в topDisplay.text!"." затем вызвать функцию A, в противном случае вызов функции B . Метод, rangeOfString, возвращает nil, если нет. ". найден. Поэтому мне интересно, можно ли проверить nil внутри выражения встроенного условия и вызвать вызов функции одновременно.

+3

возможно дубликат [Инлайн, если состояние с нулем в стриже] (http://stackoverflow.com/questions/30392878/inline-if-condition-with-nil -in-swift) – Moritz

+0

topDisplay.text! .rangeOfString (".")? functionA(): functionB() Выше выражение просто не компилировалось. Все должно быть изменено? – Yao

+0

Первым делом следует использовать 'rangeOfString (". ")! = Nil? ... 'как было предложено в ответе на ваш предыдущий вопрос ... –

ответ

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() 
} 
+0

Я действительно хочу, чтобы функция A и functionB делали что-то другое, кроме как просто вернули строку. Фактически, как показывает мой код, я не назначаю никакого возвращаемого значения для любой строки. Все, что я хочу сделать, это попытаться выразить оператор if/else в одной строке. Похоже, здесь это невозможно, спасибо! – Yao

Смежные вопросы