自定义中缀运算符的优先级和结合性
每一个自定义的中缀运算符都y属于一个优先级组
优先级组指定了自定义中缀运算符和其他中缀运算符的关系
struct Coordinate2D{
var x = 0.0, y = 0.0
}
infix operator +-: AdditionPrecedence
extension Coordinate2D {
static func +- (left: Coordinate2D,right: Coordinate2D) ->Coordinate2D{
return Coordinate2D(x:left.x + right.x,y: left.y - right.y)
}
}
infix operator *^: MultiplicationPrecedence
//自定义优先级组
precedencegroup MyPrecedence {
// higherThan:AdditionPrecedence 优先级比加法运算高
lowerThan: AdditionPrecedence // 优先级, 比加法运算低
associativity: left // 结合方向:left, right or none
assignment:false // true=赋值运算符,false=非赋值运算符
}
extension Coordinate2D {
static func *^ (left: Coordinate2D,right: Coordinate2D) -> Coordinate2D {
return Coordinate2D(x: left.x * right.x,y: left.y * left.y + right.y * right.y)
}
}
let firsCoordinate = Coordinate2D(x: 1.0, y: 2.0)
let secondCoordinate = Coordinate2D(x: 3.0, y: 8.0)
let plusMinusCoordinate = firsCoordinate +- secondCoordinate
let thirdCoordinate = Coordinate2D(x: 2.0, y: 2.0)
let coordinate = firsCoordinate +- secondCoordinate *^ thirdCoordinate
print(coordinate.x)
print(coordinate.y)
infix operator如下图:
苹果官方文档:https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations