gpt4 book ai didi

swift - 我正在尝试为 Swift 3 更新我的 for 循环,但我无法弄清楚。我不断收到错误

转载 作者:行者123 更新时间:2023-11-28 16:10:37 24 4
gpt4 key购买 nike

这是我在 Swift 2 中的原始功能:

// check on winning combinations
func checkWinnerMove(){
for var i = 0; i<winningCombinations.count && !isWinner;i += 1 {
if gameState[winningCombinations[i][0]-1] == activePlayer &&
gameState[winningCombinations[i][1]-1] == activePlayer &&
gameState[winningCombinations[i][2]-1] == activePlayer{
isWinner = true;

}else{
isWinner = false;
}
}
}

我把它改成了这样:

// check on winning combinations
func checkWinnerMove(){

for i in 0 ..< winningCombinations.count && !isWinner{
if gameState[winningCombinations[i][0]-1] == activePlayer &&
gameState[winningCombinations[i][1]-1] == activePlayer &&
gameState[winningCombinations[i][2]-1] == activePlayer{
isWinner = true;

}else{
isWinner = false;
}
}
}

但是当我添加

时总是报错

&& !isWinner

for-in 循环中的语句。我得到的错误是:

No '..<' candidates produce the expected contextual result type 'Bool'

有什么建议吗?谢谢!

最佳答案

与其强行尝试重写您原来的 C 风格 for 循环,不如考虑您要实现的目标并尝试从头开始用“原生”Swift 重写它。一旦你的真实条件得到满足,如何打破你的循环,而不是将它保留在循环签名中?例如

for i in 1...5 {
print(i)
if i == 3 { break }
} // 1 2 3

应用于你的例子

func checkWinnerMove()
isWinner = false
for i in 0 ..< winningCombinations.count {
if gameState[winningCombinations[i][0]-1] == activePlayer &&
gameState[winningCombinations[i][1]-1] == activePlayer &&
gameState[winningCombinations[i][2]-1] == activePlayer {
isWinner = true
break
}
}
}

(我们未知的)gameStatewinningCombinations 序列的显式索引访问非常“笨拙”w.r.t.索引超出序列范围的运行时异常的危险。因此请记住,有更安全的方法来执行此类访问。


为了将来引用,请考虑阅读 How to create a Minimal, Complete, and Verifiable example :因为我们(您问题的潜在回答者)无法访问/有关 isWinnerwinningCombinationsgameStateactivePlayer,我们无法验证您的示例。此外,由于问题涵盖了一个概念,因此可以将其归结为更小的形式。 (欢迎来到 StackOverflow!)

关于swift - 我正在尝试为 Swift 3 更新我的 for 循环,但我无法弄清楚。我不断收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com