2015-02-23 1 views
2

Swift/XcodeСтрока не раскладывается в Int в Swift

Я не понимаю, почему кажется, что Swift не проверяет равенство для «iPicked_p и numForColorPick» в операторе IF, не давая мне ошибку, что говорит «Строка не конвертируется в целом»

var colors: [String] = ["red", "yellow", "green", "blue", "orange", "purple", "white"] 

func pickAColor (iPicked_p: String){ 
    for num4ColPick in colors{ 
     if (iPicked_p == colors[num4ColPick]){ 
      println ("This color is available.") 
     } else{ 
      println ("Sorry, this is not an available color"){ 
    } 

} 

pickAColor = "red" 
+0

В дополнение к ошибке компилятора логика в этом коде также неверна, она не даст желаемого результата. Вместо этого вы хотите использовать функцию 'contains'. –

+0

Привет, Конрад, и спасибо за вход. Я посмотрю эту функцию. – Kirk

ответ

1

Учитывая, что вы перекручивание через colors список, который представляет собой список из String с, num4ColPick будет String, а затем вы пытаетесь индексировать список String s по String, но вы можете только индексировать список числом.

Вы, вероятно, хотите изменить цикл к:

for colorToCheck in colors{ 
    if (iPicked_p == colorToCheck){ 
     // ... 
+0

Спасибо, Andrew, но я пытаюсь передать переменную функции, которая будет проходить через массив, который может меняться. Моя мысль заключалась в том, что значение передается функции, и функция проходит через список, чтобы проверить, есть ли совпадение. – Kirk

+0

Все в порядке, просто вы поняли, как работает цикл 'for .. in'. –

+0

Я все еще смущен, но я думаю, что буду изучать больше – Kirk

0

Так что я считаю, что работает для меня следующее ... Я думаю, что есть несколько способов сделать это, но ради закрывая это, я просто хочу опубликовать рабочий фрагмент для тех, кто ищет похожие ответы.

var colors: [String] = ["red", "yellow", "green", "blue", "orange", "purple", "white"] 

func pickAColor (iPicked_p : String){ 
    println("Your color is "+"\(iPicked_p)") 
    for nameOfColor in colors{ 
     println("\(nameOfColor)") 
     if (iPicked_p == nameOfColor){ 
      println ("This color is available.") 
      println ("\(nameOfColor)") 
      let iColor = find (colors, "\(iPicked_p)")! //The ! removes the "some" in result 
      println("Your color is at Index +\(iColor)") 
     } else{ 
      // println ("Sorry, this is not a color match.") 
     } 
    } 

} 

pickAColor("white") // call the function and pass the color 
Смежные вопросы