Swift中for循环出现Cannot assign to property: 'card'为let常量错误求助
Swift中for循环里"Cannot assign to property: 'card' is a 'let' constant"错误解决
我来帮你拆解这个问题的原因和解决办法:
首先,你碰到的Cannot assign to property: 'card' is a 'let' constant错误,核心原因是:在for card in cards这个遍历逻辑里,循环变量card默认是不可变的let常量,Swift不允许修改它的属性。而且还有个隐藏的逻辑问题:就算你强行把card改成var,因为Card大概率是值类型(struct),你遍历得到的只是原数组元素的副本,修改副本根本不会影响原数组里真实卡片的状态,等于做无用功。
那怎么正确修改原数组里所有卡片的状态呢?你需要通过索引直接访问原数组中的元素,这样修改的就是数组里的真实对象了。把else块里的循环改成这样:
else { for index in cards.indices { cards[index].isFaceUp = false } faceUpCount = 0 // 这里别忘了把faceUpCount重置为0,否则后续点击的逻辑会出错 }
另外顺便提个小建议:你代码里的alreadyFaceUpCard初始化方式有点风险,现在是直接创建一个空的Card(),如果faceUpCount不为0的场景下,这个初始值可能会引发逻辑错误。建议把它改成可选类型,比如var alreadyFaceUpCard: Card?,然后在faceUpCount == 0的分支里再赋值,这样代码逻辑会更严谨。
内容的提问来源于stack exchange,提问作者sriram hegde
相关产品推荐
相关产品推荐

