本章内容概览:Swift中的操作符
上一节:【iOS】03_Swift基础语法(控制流、集合)
下一节:【iOS】05_Swift内置基础库
同系列文章请查看:快乐码元 - iOS篇
1.赋值
=, +=. -=, *=, /=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 let i1 = 1 var i2 = i1i2 = 2 print (i2) i2 += 1 print (i2) i2 -= 2 print (i2) i2 *= 10 print (i2) i2 /= 2 print (i2)
2.计算符
+, -, *, /, %
1 2 3 4 5 6 7 let i1 = 1 let i2 = i1print ((i1 + i2 - 1 ) * 10 / 2 % 3 ) print ("i" + "1" ) print (- i1)
3.比较运算符
==, >
遵循 Equatable 协议可以使用 == 和 != 来判断是否相等:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 print (1 > 2 ) struct S : Equatable { var p1: String var p2: Int } let s1 = S (p1: "one" , p2: 1 )let s2 = S (p1: "two" , p2: 2 )let s3 = S (p1: "one" , p2: 2 )let s4 = S (p1: "one" , p2: 1 )print (s1 == s2) print (s1 == s3) print (s1 == s4)
类需要实现 == 函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class C : Equatable { var p1: String var p2: Int init (p1 : String , p2 : Int ) { self .p1 = p1 self .p2 = p2 } static func == (l : C , r : C ) -> Bool { return l.p1 == r.p1 && l.p2 == r.p2 } } let c1 = C (p1: "one" , p2: 1 )let c2 = C (p1: "one" , p2: 1 )print (c1 == c2)
元组比较:
会先比较第一个数,第一个无法比较才会比较第二个数
字符串比较和字母大小还有长度有关。先比较字母大小,再比较长度
1 2 3 4 ("apple" , 1 ) < ("apple" , 2 ) ("applf" , 1 ) < ("apple" , 2 ) ("appl" , 2 ) < ("apple" , 1 ) ("appm" , 2 ) < ("apple" , 1 )
4.三元
_ ? _ : _
简化 if else 写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 func f1 (p : Int ) { if p > 0 { print ("positive number" ) } else { print ("negative number" ) } } func f2 (p : Int ) { p > 0 ? print ("positive number" ) : print ("negative number" ) } f1(p: 1 ) f2(p: 1 )
5.Nil-coalescing ??
简化 if let else 写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 func f1 (p : Int ?) { if let i = p { print ("p have value is \(i) " ) } else { print ("p is nil, use defalut value" ) } } func f2 (p : Int ?) { let i = p ?? 0 print ("p is \(i) " ) }
6.范围 a…b
简化的值范围表达方式。
1 2 3 4 5 6 7 8 9 for i in 0 ... 10 { print (i) } for i in 0 ..< 10 { print (i) }
1 2 3 let nums = [5 ,6 ,7 ,8 ]print (nums[2 ... ])
7.逻辑
!, &&, ||
1 2 3 4 5 6 let i1 = - 1 let i2 = 2 if i1 != i2 && (i1 < 0 || i2 < 0 ) { print ("i1 and i2 not equal, and one of them is negative number." ) }
8.恒等
===, !==
恒等返回是否引用了相同实例 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class C { var p: String init (p : String ) { self .p = p } } let c1 = C (p: "one" )let c2 = C (p: "one" )let c3 = c1print (c1 === c2) print (c1 === c3) print (c1 !== c2)
9.运算符
9.1 位运算符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 let i1: UInt8 = 0b00001111 let i2 = ~ i1 let i3: UInt8 = 0b00111111 let i4 = i1 & i3 let i5 = i1 | i3 let i6 = i1 ^ i3 print (i1,i2,i3,i4,i5,i6)let i7 = i1 << 1 let i8 = i1 >> 2 print (i7,i8)
9.2 溢出运算符
&+、&- 、&*
1 2 3 4 5 6 7 8 9 10 var i1 = Int .maxprint (i1) i1 = i1 &+ 1 print (i1) i1 = i1 &+ 10 print (i1) var i2 = UInt .maxi2 = i2 &+ 1 print (i2)
运算符函数包括前缀运算符、后缀运算符、复合赋值运算符以及等价运算符。另,还可以自定义运算符,新的运算符要用 operator 关键字进行定义,同时要指定 prefix、infix 或者 postfix 修饰符。
参考资料:
Tips:
Please indicate the source and original author when reprinting or quoting this article.