【问题标题】:Error: "Cannot assign to immutable expression of type 'Bool'"?错误:“无法分配给'Bool'类型的不可变表达式”?
【发布时间】:2017-04-14 07:45:47
【问题描述】:
我该如何解决这个问题?我是一个新的编码员。谢谢
我收到以下错误:
“不能分配给'Bool'类型的不可变表达式”
当我尝试将“isSelected”设置为false 和true时
@IBAction func onFilter(_ sender: Any) {
if ((sender as AnyObject).isSelected == true) {
hideSecondaryMenu()
(sender as AnyObject).isSelected = false
} else {
showSecondaryMenu()
(sender as AnyObject).isSelected = true
}
}
【问题讨论】:
标签:
xcode
swift3
immutability
sender
【解决方案1】:
您收到此错误是因为当您将发件人转换为 AnyObject 时,您将获得 immutable 类型的对象,因此您无法更新其属性,解决您的问题的最佳选择是将您的发件人声明从 Any 更改到实际的UIControl 表示如果它是按钮则UIButton。
@IBAction func onFilter(_ sender: UIButton) {
hideSecondaryMenu()
sender.isSelected = !sender.isSelected
}
如果您仍想使用Any,请将发件人转换为它所属的实际UIControl。
@IBAction func onFilter(_ sender: Any) {
if sender is UIButton {
let btn = sender as! UIButton
hideSecondaryMenu()
btn.isSelected = !btn.isSelected
}
}