Swift 中的高级操作符

位操作符

非:~
与:&
或:|
异或:^

左移:<<
右移:>>

对于无符号表示和有符号表示,位移行为不一样。

溢出运算符

Overflow addition (&+)
Overflow subtraction (&-)
Overflow multiplication (&*)
Overflow division (&/)
Overflow remainder (&%)

上溢

   0 11111111
&+ 0 00000001
=  1 00000000
= 0

下溢

   00000000
&+ 00000001
=  11111111
= 255

for both signed and unsigned integers,
overflow always wraps around from the largest valid integer value back to the smallest,
and underflow always wraps around from the smallest value to the largest.

除0

&/&% 除零都返回零。

运算符函数

struct Vector2D {
    var x = 0.0, y = 0.0
}
func + (left: Vector2D, right: Vector2D) -> Vector2D {
    return Vector2D(x: left.x + right.x, y: left.y + right.y)
}

let vector = Vector2D(x: 3.0, y: 1.0)
let anotherVector = Vector2D(x: 2.0, y: 4.0)
let combinedVector = vector + anotherVector

前缀、后缀

添加 prefixpostfix 修改符。

prefix func - (vector: Vector2D) -> Vector2D {
    return Vector2D(x: -vector.x, y: -vector.y)
}

混合赋值运算符

把左操作数标记为 inout

func += (inout left: Vector2D, right: Vector2D) {
    left = left + right
}
prefix func ++ (inout vector: Vector2D) -> Vector2D {
    vector += Vector2D(x: 1.0, y: 1.0)
    return vector
}

默认的赋值运算符和三元运算符(a ? b : c) 不能重载。

等号运算符

自定义的类和结构没有默认的等号比较运算。

自定义运算符

[prefix/infix/postfix] operator [opName] {
  associativity [left/right/none] precedence [preValue]
}

先用上述的语法声明运算符,然后为自己的类实现运算。
associativity 默认为 none
precedence 默认为 0.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 高级运算符(Advanced Operators) 本文参考自苹果官方文档Advanced Operators本页...
    果啤阅读 1,625评论 1 5
  • 2017年11月17日 【哥哥篇】今晚哥同学和同学妈妈一起来家里,临走前让哥跟他们一起出去买点夜宵吃。估计是出于不...
    向着阳光00阅读 177评论 0 1
  • 大爷我最近心情不痛快。 我是 怒从心头起! 恶向胆边生! 拔刀四顾一声吼! 茬架没有人!
    陈狂阅读 423评论 13 6
  • 都不想把那些男男女女你内心并行不悖吧寶動宝贝小宝贝不想你寶動寶動本微博并栢寶動白血病细胞白血病细胞细胞白血病寶動吧...
    IBOS杨芳贤阅读 309评论 0 0