我想像在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/

10-10 23:25