只列出与Swift和C语言不一样用法或者一些在C中不常见的用法
元组赋值
let (x,y) = (1,2)
不同于C和Objective-C在,Swift中,赋值操作不返回一个值,所以以下操作是不允许的
if x=y { //错误,x=y不返回值.(注意赋值操作是`=`,判等操作是`==`)
}
溢出
和C,Objective-C不同,Swift默认不允许溢出操作,如果需要溢出,使用溢出操作符
a &+b
字符串相加
在Swift中,支持字符创相加
"hello, "+"world"
元组比较
你同样可以比较拥有同样数量值的元组,只要元组中的每个值都是可比较的。比如说, Int
和 String
都可以用来比较大小,也就是说 (Int,String)
类型的元组就可以比较。一般来说, Bool
不能比较,这意味着包含布尔值的元组不能用来比较大小。
元组以从左到右的顺序比较大小,一次一个值,直到找到两个不相等的值为止。如果所有的值都是相等的,那么就认为元组本身是相等的。比如说:
(1, "zebra") < (2, "apple") // true ,因为1<2
(3, "apple") < (3, "bird") // true 因为3等于2并且"apple" 小于 "bird"
(4, "dog") == (4, "dog") // true 因为4和4相等,dog和dog相等
从第一个例子看出,如果元组前面的值已经决出大小了,就不用进行后面的比较了.
合并空值操作符(??
操作符)
a ?? b
如果可选项a是有值的,则展开,如果a是没有值的,使用b的值.
相当于以下操作
a! = nil ? a!:b
用例
let defualtColorName="red"
var userDefinedColorName:String?
var colorNameToUse = userDefinedColorName ?? defualtColorName
区间运算符
-
...
:闭区间
for index in 1...5 {
print("\(index) times 5 is \(index*5)")
}
/ 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
-
..<
或者..>
:开区间
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack
其他
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true