美文网首页
高级运算符

高级运算符

作者: MissSunRise | 来源:发表于2021-08-02 17:06 被阅读0次

溢出运算符

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

-128.png print(Int8.min).png

Int8的最小数是-128,最大数是127

UInt8的最小数是0,最大数是255

print(v).png

提示会溢出

var.png 0x1090036d6 $936 ud2.png

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

怎么解决呢??

Var.png -128.png

使用溢出运算符,可以不使其报错。

但是这里就有问题了。Int8最大数是127,为什么加1不是128,而是-128

原因是:这里做的不是数学中的加法,而是运算,Int8,是8位,里面的二进制全是1 ,加一会进位,得到的数,是-128的二进制

-UInt8_.png UInt8.min.png

运算符重载

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

例如,我们可以方便的去做结构体的运算

struct Point {.png Point(x:32 y 25).png

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

struct Point.png

将重载方法放在结构体中,报错了….

因为这样写是一个实例方法,只有实例才能调用。我们需要加一个static来修正这个报错

struct Point {.png static func += (p1 Point, p2 Point){.png var.png

Equatable

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

var p1 Point(x 10, y 12).png

没有加Equatable 报错

struct Point Equatablel {.png static func 三二 (p1 Point, p2 Point) 一> Bool {.png

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

cllass Person Equatable {.png

Comparable(比较大小)

struct Student.png

想要比较2个实例的大小??
一般做法:
1.遵守Comparable 协议
2.重载相应的运算符

自定义运算符

自定义运算符?自己创建一个运算符,自己实现功能

prefix operator 前缀运算符.png precedencegroup 优先级组.png

中缀运算符 需要自己去设置优先级关系

associativity 多个运算符运算关系

注意 assignment 是先处理可选链还是运算符。说白了,就是说在nil的情况能不能使用

11.png

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

struct Point、.png

自定义前缀运算符

27 prefix operator +++.png

相关文章

  • 第二十四节 Swift 高级运算符

    除了加减乘除运算符,常用的位运算符在 Swift里属于高级运算符。 其它的高级运算符还有移位运算符和溢出加法运算符...

  • 26_高级运算符

    除了基本运算符,Swift 中还有许多可以对数值进行复杂运算的高级运算符。这些高级运算符包含了在位运算符和移位运算...

  • Swift编程二十八(高级运算符)

    案例代码下载 高级运算符 除了基本运算符中描述的运算符之外,Swift还提供了几个执行更复杂值操作的高级运算符。这...

  • swift2.2 - 高级运算符

    高级运算符 文档地址 作为 基本运算符 的补充,Swift 提供了几个高级运算符执行对数传值进行更加复杂的操作。这...

  • 26 高级运算符

    高级运算符 除了Basic Operators中描述的基本运算符之外,Swift还提供了几个执行更复杂值操作的高级...

  • 27、【Swift】高级运算符 - Advanced Opera

    Swift 运算符基本运算符高级运算符(包括 C 或 Objective-C 所有按位和移位运算符。) 与 C 的...

  • 高级运算符

    运算符语法 在运算符,冒号和搜索项之间没用空格。 运算符搜素的部分遵从google的基本语法 高级运算符能和一个单...

  • Advanced Operators

    高级运算符。不同于C,swfit中的运算符默认是不可溢出的,溢出会报错。你可以使用&加运算符表示可溢出运算符。 按...

  • 5.1 高级运算符与枚举

    除了算术运算符、逻辑运算符等基础的运算符外,Swift语言还提供了许多关于运算符的高级使用技巧。开发者甚至可以重新...

  • Swift - 高级运算符

    高级运算符 除了之前介绍过的 基本运算符[https://www.jianshu.com/p/36d7fb4525...

网友评论

      本文标题:高级运算符

      本文链接:https://www.haomeiwen.com/subject/dxdjvltx.html