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是的,没错。补充。