溢出运算符
Swift的算数运算符出现溢出时会抛出运行时错误
Swift有溢出运算符(&+、&-、&*),用来支持溢出运算


Int8的最小数是-128,最大数是127
UInt8的最小数是0,最大数是255

提示会溢出


运行时报错,说明了在计算的时候,如果超出了这个变量类型的大小,那么就会溢出,导致报错
怎么解决呢??


使用溢出运算符,可以不使其报错。
但是这里就有问题了。Int8最大数是127,为什么加1不是128,而是-128
原因是:这里做的不是数学中的加法,而是运算,Int8,是8位,里面的二进制全是1 ,加一会进位,得到的数,是-128的二进制


运算符重载
类、结构体、枚举可以为现有的运算符提供自定义的实现,这个操作叫做:运算符重载(说人话就是,平时用的运算符是一个方法,而我们可以自己去实现这个方法)
例如,我们可以方便的去做结构体的运算


而写在全局可能对其他代码造成干扰,最好是谁使用,谁实现

将重载方法放在结构体中,报错了….
因为这样写是一个实例方法,只有实例才能调用。我们需要加一个static来修正这个报错



Equatable
要想得知2个实例是否等价,一般做法是遵守Equatable 协议,重载 == 运算符
与此同时,等价于重载 != 运算符

没有加Equatable 报错


想实现等价,首先要去遵守Equatable协议,如果看到没有遵守Equatable协议,依然可以做等价的,那么肯定是在底层就遵守了Equatable协议。

Comparable(比较大小)

想要比较2个实例的大小??
一般做法:
1.遵守Comparable 协议
2.重载相应的运算符
自定义运算符
自定义运算符?自己创建一个运算符,自己实现功能


中缀运算符 需要自己去设置优先级关系
associativity 多个运算符运算关系
注意 assignment 是先处理可选链还是运算符。说白了,就是说在nil的情况能不能使用

自定义的运算符,要继承自己设计的协议

自定义前缀运算符

网友评论