Arrays 为什么Xcode显示错误:变异运算符的左侧为';t可变:条件运算符的结果';?:';永远不可变吗?

Arrays 为什么Xcode显示错误:变异运算符的左侧为';t可变:条件运算符的结果';?:';永远不可变吗?,arrays,swift,for-loop,conditional-operator,Arrays,Swift,For Loop,Conditional Operator,我正在重温苹果的课程书籍,并试图以不同的方式完成练习。问题很简单:我得到了一个数组,我必须循环该数组来计算选票 enum ClassTripDestination { case beach, chocolateFactory } let tripDestinationVotes: [ClassTripDestination] = [.beach, .chocolateFactory, .beach, .beach, .chocolateFacto

我正在重温苹果的课程书籍,并试图以不同的方式完成练习。问题很简单:我得到了一个数组,我必须循环该数组来计算选票

    enum ClassTripDestination {
        case beach, chocolateFactory
    }
    
    let tripDestinationVotes: [ClassTripDestination] = [.beach, .chocolateFactory, .beach, .beach, .chocolateFactory]
实际数组有200个值,我在这里缩短了它,这样它就不会占用太多空间


解决方案非常简单:

var beach = Int()
var factory = Int()

for destination in tripDestinationVotes {
    if destination == .beach {
        beach += 1
    } else {factory += 1}
    
}
但我决定练习三元运算符,并得出以下结论:

for destination in tripDestinationVotes {
    destination == .beach ? beach += 1 : factory += 1

}
正如我的主题所述,Xcode对这段代码不满意

变异运算符的左侧不可变:条件的结果 运算符“?:”是不可变的

但让我烦恼的是,就在这个练习之前,我完成了另一个——非常类似。我不得不在一排鸡中搜寻

var chickenOfInterestCount = 0
for chicken in chickens {
    chicken.temper == .hilarious ? chickenOfInterestCount += 1 : nil
}
chickenOfInterestCount
这段代码执行时没有任何问题


有人能给我解释一下,为什么数组中的选票计数有问题?

好吧,结果证明解决方法非常简单。正如拉贾·基尚(Raja Kishan)所说,我只需要在
beach+=1
周围放上大括号,就像这样:

for destination in tripDestinationVotes {
    destination == .beach ? (beach += 1) : (factory += 1)

}

解决方案很简单,只需在真零件代码和假零件代码周围添加圆括号

for destination in tripDestinationVotes {
    (destination == .beach) ? (beach += 1) : (factory += 1)
}

我认为,对于您的代码,Xcode只是混淆了它有多个符号,比如等于或加号。但对于最后一种情况,很明显,假部分为零,正确识别真部分

只要尝试为真和假两种情况添加圆括号即可。比如(beach+=1)试试
beach+=destination==beach?1:1
@Raja Kishan有时我不明白Xcode下一步会做什么。这真的解决了这个问题。@Tushar Sharma为了让它起作用,冒号后面应该是“0”。它只会增加海滩变量,而其他人已经回答了你的特定语法问题,我建议你考虑使用<代码>字典<代码>来模拟投票计数。它更短更简单,请看:让拉贾发布这个,这样你就可以奖励他了。@Tushar Sharma如果他发布了它,我会将它设置为一个答案。我会在
destination==.beach
周围加上括号。它们不是必需的,因为
==
的优先级高于
?:,但它们会使它更容易阅读。@Caleb是的,没错。补充。