2016-12-13 3 views
-2
func endRound() { 
    timerLabel.isHidden = true 
    var label1Index = allEvents.index(of: label1.text!) 
    var label2Index = allEvents.index(of: label2.text!) 
    var label3Index = allEvents.index(of: label3.text!) 
    var label4Index = allEvents.index(of: label4.text!) 
    if (label4Index > label3Index > label2Index > label1Index) { 
     score = score + 1 
     let successImage = UIImage(named: "next_round_success")! as UIImage 
     nextRoundButtonOutlet.setImage(successImage, for: UIControlState.normal) 
     nextRoundButtonOutlet.isHidden = false 
     round = round + 1 
    } else { 
     let failImage = UIImage(named: "next_round_fail")! as UIImage 
     nextRoundButtonOutlet.setImage(failImage, for: UIControlState.normal) 
     nextRoundButtonOutlet.isHidden = false 
     round = round + 1 
    } 
    if (round == 6) { 
    } 
} 

По какой-то причине, я получаю: с „? Array.Index“Если оператор в функции не работает

«Значение типа не разворачивается, вы хотели использовать '!' или '??' "

ошибка рядом с первым if заявление.

Когда я добавляю ! марок, так как компилятор предполагает, рядом друг с переменными в пределах if заявления, я получаю: с

«бинарного оператора„>“не может быть применен к операндам типа„Bool“ и 'Array.Index' (он же целое) "

и:

" Прилегающие операторы в неассоциативного старшинства группы «ComparisonPrecedence '"

Не уверен, что делать. Переменные в операторе if представляют собой индексный номер строк меток (просто прочитайте код, и вы поймете это).

Любая помощь была бы apperciated.

+0

Я думаю, что ваше название усекается –

+0

Что вы хотите, чтобы ваша программа делать, если один или несколько строк поиска не найдено? –

ответ

1

У вас есть несколько вопросов. Вызов allEvents.index(of: label1.text!) возвращает необязательный результат, так как возможно, что текст не будет найден в массиве. При добавлении ! возникает риск срыва вашего приложения, если текст не найден. Одним из вариантов было бы установить в таком случае особое значение, например -1.

var label1Index = allEvents.index(of: label1.text!) ?? -1 
var label2Index = allEvents.index(of: label2.text!) ?? -1 
var label3Index = allEvents.index(of: label3.text!) ?? -1 
var label4Index = allEvents.index(of: label4.text!) ?? -1 

Теперь для заявления if. Вы не можете связать кучу > подобных сравнений. Вам нужно:

if (label4Index > label3Index && label3Index > label2Index && label2Index > label1Index) { 
} 
+0

Хороший ответ, хотя преобразование пустого необязательного значения в -1, похоже, превзошло цель опций (не используя какое-либо «магическое значение» для представления «недействительного результата найдено» или пустого состояния. Лучше использовать необязательную привязку, охрану операторы или какой-либо другой код, чтобы чисто обрабатывать случай, когда строки не найдены. –

+0

@ DuncanC Да, вы делаете действительную точку. В этом случае я предложил использовать «магическое число» '-1', потому что это казалось чтобы быть простым способом для достижения цели здесь. Вероятно, было бы хорошей идеей для вас опубликовать ответ, показывающий, как это сделать, как вы предлагаете. – rmaddy

+0

rmaddy, мне не ясно, что OP хочет сделать, если одна или несколько строк не найдены. –

0

Как rmaddy говорит в своем ответе, вы получаете сообщение об индексах не являются развернутыми, так как функция строки index(of:) возвращает опционную, который будет нолем, если строка не найдена.

Как указал rmaddy, ваш код, чтобы убедиться, что строки находятся в правильном порядке, также недействителен.

Код if a > b > c > d недействителен Swift. Вы должны переписать, что, как

if a > b && b > c && c > d

Предполагая, что не в состоянии найти какой-либо из строк означает, что вы хотите следовать потерпеть неудачу путь, вы можете переписать код так:

func endRound() { 
    var scored = false 
    timerLabel.isHidden = true 
    if let label1Index = allEvents.index(of: label1.text!), 
     let label2Index = allEvents.index(of: label2.text!), 
     let label3Index = allEvents.index(of: label3.text!), 
     let label4Index = allEvents.index(of: label4.text!), 
     label1Index > label2Index && 
     label2Index > label3Index && 
     label3Index > label4Index { 
     score = score + 1 
     let successImage = UIImage(named: "next_round_success")! as UIImage 
     nextRoundButtonOutlet.setImage(successImage, for: UIControlState.normal) 
     nextRoundButtonOutlet.isHidden = false 
     round = round + 1 
    } else { 
     let failImage = UIImage(named: "next_round_fail")! as UIImage 
     nextRoundButtonOutlet.setImage(failImage, for: UIControlState.normal) 
     nextRoundButtonOutlet.isHidden = false 
     round = round + 1 
    } 
    if (round == 6) { 
    } 
} 

Этот код должен увеличить оценку, если все 4 строки найдены и в правильном порядке. Если одна или несколько строк не найдены или что-либо не указано в label1 label2 label3 label4 order, она выполнит предложение else (fail).

Я думаю это то, что вы после ...

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