2014-09-03 5 views
0

Я работаю над некоторыми учебниками для Swift. Я наткнулся на учебник TicTacToe, который я пытаюсь использовать с помощью Xcode 6 Beta 6. Я получаю следующую ошибку, когда проверяю значения в словаре: Не удалось найти перегрузку для '& &', которая принимает прилагаемые аргументы , Вот мой код.Ошибка Swift: Не удалось найти перегрузку для '&&', которая принимает предоставленные аргументы

var plays = [Int:Int]() 

var whoWon = ["I":0,"you":1] 
for (key,value) in whoWon { 
if ((plays[6] == value && plays[7] == value && plays[8] == value) || 
    (plays[3] == value && plays[4] == value && plays[5] == value) || 
    (plays[0] == value && plays[1] == value && plays[2] == value) || 
    (plays[6] == value && plays[3] == value && plays[0] == value) || 
    (plays[7] == value && plays[4] == value && plays[1] == value) || 
    (plays[8] == value && plays[5] == value && plays[2] == value) || 
    (plays[6] == value && plays[4] == value && plays[2] == value) || // error appears on this line 
    (plays[8] == value && plays[4] == value && plays[0] == value)) 
{ 
    userMessage.hidden = false 
    userMessage.text = "Looks like \(key) won!" 
} 
+0

Как вы можете разбить что-то на подвыражения? – skyguy

ответ

0

Если вы посмотрите на полный вывод компилятора в навигаторе отчетов, то вы увидите сообщение

note: expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

, который говорит вам, как решить эту проблему.

+0

Спасибо. Я забыл о вкладке «Навигатор проблем». – Renee

+0

Hey @Martin R Я работаю с этим же учебным пособием, и я начинаю, как бы вы начали разбивать его на подвыражения? – skyguy

1

Я делал то же учебное пособие. мне кажется немного странным, что он должен был быть разбит в подвыражения, но он сделал свое дело, и, как я прочитал здесь: http://swiftlang.eu/community/34-xcode-6-beta-6-swift-can-t-handle-long-expressions/0

это может быть связано с проблемой Xcode.

Вот переписана функция:

func checkForWin() { 
    var whoWon = ["I": 0, "You": 1] 
    for (key, value) in whoWon { 
     var wonA = (plays[1] == value && plays[2] == value && plays[3] == value) 
     var wonB = (plays[4] == value && plays[5] == value && plays[6] == value) 
     var wonC = (plays[7] == value && plays[8] == value && plays[9] == value) 
     var wonD = (plays[1] == value && plays[4] == value && plays[7] == value) 
     var wonE = (plays[2] == value && plays[5] == value && plays[8] == value) 
     var wonF = (plays[3] == value && plays[6] == value && plays[9] == value) 
     var wonG = (plays[1] == value && plays[5] == value && plays[9] == value) 
     var wonH = (plays[3] == value && plays[5] == value && plays[7] == value) 

     if(wonA || wonB || wonC || wonD || wonE || wonF || wonG || wonH) { 
       userMessage.hidden = false 
       userMessage.text = "Looks like \(key) won!" 
       resetBtn.hidden = false 
       done = true 
     } 
    } 
} 
+1

Почему 'var' вместо' let'? (I.E., won * может быть константой, правильно? ...) –

0

Используйте круглые скобки, чтобы «ломки выражение в различных суб-выражений». Это работает в Xcode 6.4

if (((plays[1] == value) && (plays[2] == value) && (plays[3] == value)) || 
    ((plays[4] == value) && (plays[5] == value) && (plays[6] == value)) || 
    ((plays[7] == value) && (plays[8] == value) && (plays[9] == value)) || 
    ((plays[1] == value) && (plays[4] == value) && (plays[7] == value)) || 
    ((plays[2] == value) && (plays[5] == value) && (plays[8] == value)) || 
    ((plays[3] == value) && (plays[6] == value) && (plays[9] == value)) || 
    ((plays[1] == value) && (plays[5] == value) && (plays[9] == value)) || 
    ((plays[3] == value) && (plays[5] == value) && (plays[7] == value))) {...}