Swift运算符
2022-11-13 本文已影响0人
Sweet丶
1. 溢出运算符(Overflow Operator)
运算符可见官方说明:https://developer.apple.com/documentation/swift/operator-declarations
在Swift中,对于运算结果超出最大值或者低于最小值时,编译时期会报错误,如下:
不使用溢出运算符会报错.png对于这种运算结果可能超出范围的情况,我们如果还坚持想进行,那么Swift提供了溢出运算符, 运算时如果超出了范围会从最大的一端继续向最小端继续计算,比如UInt8.max &+ 1
的值是UInt8.min
= 0.
func testOverflowOperator() {
print(UInt8.max) // 255
var a = UInt8.max
// a += 1 // 编译时报错Arithmetic operation '127 + 1' (on type 'Int8') results in an overflow
// a = UInt8.min
// a -= 1// 编译时报错同上
// 下面是溢出运算符 &+ &— &* 的例子。结果是如果超出了会又从头开始计数
print("UInt8.max &+ 1 =", (a &+ 1)) // 0
print("UInt8.max &* 1 =", (a &* 2)) // 254
print("UInt8.max &<< 1 =", (a &<< 1)) // 254
a &+= 1
print("UInt8.max &+= 1 =", (a)) // 0
a = UInt8.min
print("UInt8.min &- 1 =", (a &- 1)) // 255
print("UInt8.min &>> 1 =", (a &>> 1)) // 0
a &-= 1
print("UInt8.min &-= 1 =", (a)) // 255
}
2. 运算符重载(Overflow Operator)
运算符重载指的是:类、枚举、结构体可以为现有的运算符提供自定义实现。
3. 自定义运算符
可以参照HandyJson库中的infix operator <<< : AssignmentPrecedence
去实现自己的特定操作符。