Swift中大部分的运算符和OC都是共用的,只是部分符号做了优化,并增加了部分符号,如??
空合运算符、区间运算符a..<b
等,,以下为优化内容:
=
- 与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回任何值。所以下面语句是无效的:
if x = y {
// 此句错误,因为 x = y 并不返回任何值
}
复制代码
避免了常见的== 写成 = 的错误
- 多元组的赋值
有点像是ES6中的解构赋值,ES6中是这样的:[a, b] = [10, 20];
而在Swift中是这样的
let (x, y) = (1, 2)
// 现在 x 等于 1,y 等于 2
复制代码
+
- Swift 默认情况下不允许在数值运算中出现溢出情况。但是你可以使用 Swift 的溢出运算符来实现溢出运算(如 a &+ b)。
- Swift支持了喜闻乐见的字符串拼接功能
"hello, " + "world" // 等于 "hello, world"
??
在ES6中,提供了如下语法糖,如果对象是undefined,则使用其他默认值
let string = a || 'string value'
复制代码
而swift也参考了这种做法,不过符号变成了两个问号??
let a = string ?? "string value"
//等价于
if string == nil , a = string else a = "string value"
复制代码
区间运算符
(a…b) 定义了 >=a && <=b 的区间
(a..<b) 定义了 >=a && <b 的区间
这里奇怪的是,无法定义 >a && <= b的区间,比如使用(a<..b) 或者(a<.<b) 也许是我想多了 。。。
for index in 1...5 {
print("\(index)") //1.2.3.4.5
}
复制代码
for index in 1..<5 {
print("\(index)") //1.2.3.4
}
复制代码
单侧区间也比较好理解,[a…] 定义了>=a的区间,[…a] 定义了<=a的区间
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names[2...] {
print(name)
}
// Brian
// Jack
复制代码
如果没有规定范围,则起反馈就是知道maxFloat的,比如
let range = ...5
range.contains(-1123123123123123123) // true
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END