无法分配给属性:在快速循环中,“ card”是for循环中的“ let”常量

sri*_*gde 4 xcode for-loop swift

无法分配给属性:choiceCard方法中的for循环中的'card'是'let'常量。我无法弄清楚为什么错误会出现在for循环中。我在代码中缺少什么。请帮忙。

import Foundation

class Concentration {

    var cards = [Card]()

    var faceUpCount = 0

    func chooseCard(atIndex : Int) {
        var alreadyFaceUpCard  = Card()
        if faceUpCount == 0 {
            alreadyFaceUpCard = cards[atIndex]
            alreadyFaceUpCard.isFaceUp = true
            faceUpCount += 1
        }else if faceUpCount == 1 {
            var card = cards[atIndex]
            card.isFaceUp = true
            if alreadyFaceUpCard.identifier == card.identifier {
                alreadyFaceUpCard.isMatchUp = true
                card.isMatchUp = true
                faceUpCount += 1
            }

        }else {
            for card in cards {
                card.isFaceUp = false
            }

        }

    }



    init(numberOfPairsOfCards : Int) {
        for _ in 1...numberOfPairsOfCards {
            let card = Card()
            cards.append(card)
            cards.append(card)
        }
        // TODO: Shuffle Cards
    }


}
Run Code Online (Sandbox Code Playgroud)

Mad*_*hur 6

卡当然是一个让常量,使其可变使用: for var card in cards

  • 这使其可以编译,但无法按预期工作。循环内部的card.isFaceUp = false只会修改局部循环变量,而不能修改数组元素。 (12认同)
  • 解决方案1:将 Card 结构更改为类;或解决方案2:获取值的索引,例如 `for i in 0..<cards.count {cards[i].isFaceUp = false}` (5认同)
  • 因此,您可以使用: for (index, _) in cards.enumerated() { car​​ds(index).isFaceUp = false } (4认同)