我想像在Objective-C中一样添加自定义运算符&=
:
precedencegroup HighPrecedence {
assignment: true
associativity: left
higherThan: BitwiseShiftPrecedence
}
infix operator &= : HighPrecedence
func &=(lhs: Bool, rhs: @autoclosure () -> Bool) -> Bool {
return lhs && rhs()
}
var i = true
i &= 1 > 0
但是我在最后一行有一个错误:
错误:变异运算符的左侧不可更改:'i'是不可变的
我&= 1> 0
有谁能够帮助我?
最佳答案
您的&=
运算符会突变左操作数,因此您拥有
将lhs
定义为inout参数(而不是返回
一个值)。
您也可以删除操作员定义,&=
已经定义
在Swift标准库中
infix operator &= : AssignmentPrecedence
(用于
BitwiseOperations
)。这样就足够了,并且可以按预期工作:func &=(lhs: inout Bool, rhs: @autoclosure () -> Bool) {
lhs = lhs && rhs()
}
var i = true
i &= 1 < 0
关于ios - 逻辑二进制中缀运算符出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41181642/