首页 > 解决方案 > 为什么 Xcode 显示错误:变异运算符的左侧不可变:条件运算符的结果'?:' 永远不可变?

问题描述

我正在重温 Apple 课程书籍并尝试以不同的方式完成练习。问题很简单:给了我一个数组,我必须循环遍历它来计算选票。

    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

这段代码的执行没有任何问题。

有人可以向我解释一下,为什么计算数组中的选票有问题?

标签: arraysswiftfor-loopconditional-operator

解决方案


解决方案很简单,只需在真假部分代码周围添加圆括号即可。

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

我认为对于您的代码,Xcode 只是因为具有多个符号(例如等于或加号)而感到困惑。但是对于倒数第二个情况,很明显错误的部分是 nil 并且正确地识别了真实的部分


推荐阅读