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)

运算符重载指的是:类、枚举、结构体可以为现有的运算符提供自定义实现。

比如下面截图中为结构体Point增加自定义实现。 运算符重载.png
3. 自定义运算符

可以参照HandyJson库中的infix operator <<< : AssignmentPrecedence去实现自己的特定操作符。

自定义操作的一些关键字.png
上一篇下一篇

猜你喜欢

热点阅读