基本操作和其它语言类似,除了:
- 空合运算符(Nil-Coalescing operator) 对可选类型解耦的一种简写
a ?? b
- 3种区间运算符,快速生成区间范围的简写
- 元组类型的比较
1.求余(Remainder Operator)
a % -b
中 -b
的负号会被忽略
// js 和 swift中一样
9 % -4 // 1
9 % 4 // 1
-9 % 4 // -1
2.比较操作符
swift中也提供了恒等 (===
) 和非恒等(!==
) 操作符,用来比较2个对象是否引用同一个对象实例。
swift中的元组(tuple)类型如果元素相同,个数相同也可以进行比较,注意 Bool
类型不能被比较
(1, "zebra") < (2, "apple") // true,因为 1 小于 2
(3, "apple") < (3, "bird") // true,因为 3 等于 3,但是 apple 小于 bird
(4, "dog") == (4, "dog") // true,因为 4 等于 4,dog 等于 dog
("blue", -1) < ("purple", 1) // 正常,比较的结果为 true
("blue", false) < ("purple", true) // 错误,因为 < 不能比较布尔类型
3.空合运算符(nil-coalescing operator)
表达式:
// 对可选类型a进行空判断,如果a有值则进行解封,没有则返回默认值b
// a 必须是 Optional类型
// b的类型必须和a包含的类型一样
a ?? b
// 等价于
(a != nil) ? a! : b // a! 表示对可选类型a进行解封
示例:
let defaultColor = "red"
var userColor: String! // 如果没有赋值 默认值为 nil
let chooseColor = userColor ?? defaultColor // "red"
// 如果有值
let defaultColor = "red"
var userColor: String! = "green"// 如果没有赋值 默认值为 nil
let chooseColor = userColor ?? defaultColor // "green"
4.区间运算符
这个和python类似,提供生成区间的快捷方式,有3种:
- 闭区间运算符(closed range operator):
a...b
, 包含a和b,a不能大于b - 半开区间运算符(half-opend range operator):
a..<b
,包含a,不包含b - 单侧区间(one-sided ranges): 即只提供一个区间,另一个区间是开放的
#1 闭区间
# 1...5 等价于 [1, 2, 3, 4, 5]
for item in 1...5 {
print("\(item)")
}
1
2
3
4
5
#2 半闭区间
# 0..<count 即 0..<3 等价于 [0, 1, 2]
let fruits = ["apple", "banana", "orange"]
let count = fruits.count // 3
for i in 0..<count {
print("\(fruits[i])")
}
// "apple"
// "banana"
// "orange"
#3.1 单侧区间 ..<count
let fruits = ["apple", "banana", "orange"]
let count = fruits.count // 3
for fruit in fruits[..<count] {
print("\(fruit)")
}
// "apple"
// "banana"
// "orange
#3.2 单侧区间 1...
let fruits = ["apple", "banana", "orange"]
let count = fruits.count // 3
for fruit in fruits[1...] {
print("\(fruit)")
}
// "banana"
// "orange
还可以这样:
let range = ...5 // PartialRangeThrough<Int> 类型
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
let range = ..."Z" // PartialRangeThrough<String> 类型
range.contains("A") // true
网友评论