2014-09-03 39 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 2014-09-20 16:14:09

回答

0

如果你看一下在报告导航完整编译器的输出,那么你将看到 消息

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

它告诉你如何解决这个问题。

+0

谢谢。我忘了问题导航器选项卡。 – Renee 2014-09-03 22:17:00

+0

嘿@Martin R我正在使用这个相同的教程,我是一个初学者,你会如何将它分解成子表达式? – skyguy 2014-09-20 02:46:38

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 *可能是常量,对吗?...) – 2014-10-14 13:54:09

0

使用圆括号“分手表达成不同的子表达式”。 This works in 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))) {...} 
相关问题