为空") return }
- 在程序编写时,条件检测之后的代码相对是比较复杂的
- 使用 guard 的好处
- 能够判断每一个值
- 在真正的代码逻辑部分,省略了一层嵌套
switch
switch
不再局限于整数
switch
可以针对任意数据类型
进行判断
- 不再需要
break
- 每一个
case
后面必须有可以执行的语句
- 要保证处理所有可能的情况,不然编译器直接报错,不处理的条件可以放在
default
分支中
- 每一个
case
中定义的变量仅在当前 case
中有效,而 OC 中需要使用 {}
let score = "优" switch score { case "优": let name = "学生" print(name + "80~100分") case "良": print("70~80分") case "中": print("60~70分") case "差": print("不及格") default: break }
- switch 中同样能够赋值和使用
where
子句
let point = CGPoint(x: 10, y: 10) switch point { case let p where p.x == 0 && p.y == 0: print("中心点") case let p where p.x == 0: print("Y轴") case let p where p.y == 0: print("X轴") case let p where abs(p.x) == abs(p.y): print("对角线") default: print("其他") }
switch score { case _ where score > 80: print("优") case _ where score > 60: print("及格") default: print("其他") }
四、for 循环
var sum = 0 for var i = 0; i < 10; i++ { sum += i } print(sum)
sum = 0 for i in 0..<10 { sum += i } print(sum)
sum = 0 for i in 0...10 { sum += i } print(sum)
for _ in 0...10 { print("hello") }
五、字符串
在 Swift 中绝大多数的情况下,推荐使用 String
类型
- String 是一个结构体,性能更高
- String 目前具有了绝大多数 NSString 的功能
- String 支持直接遍历
- NSString 是一个 OC 对象,性能略差
- Swift 提供了
String
和 NSString
之间的无缝转换
字符串演练
for s in str.characters { print(s) }
- 字符串拼接
- 直接在 "" 中使用
\(变量名)
的方式可以快速拼接字符串
let str1 = "Hello" let str2 = "World" let i = 32 str = "\(i) 个 " + str1 + " " + str2
我和我的小伙伴再也不要考虑 stringWithFormat
了 :D
- 可选项的拼接
- 如果变量是可选项,拼接的结果中会有
Optional
- 为了应对强行解包存在的风险,苹果提供了
??
操作符
??
操作符用于检测可选项是否为 nil
- 如果不是
nil
,使用当前值
- 如果是
nil
,使用后面的值替代
let str1 = "Hello" let str2 = "World" let i: Int? = 32 str = "\(i ?? 0) 个 " + str1 + " " + str2
- 格式化字符串
- 在实际开发中,如果需要指定字符串格式,可以使用
String(format:...)
的方式
let h = 8 let m = 23 let s = 9 let timeString = String(format: "%02d:%02d:%02d", arguments: [h, m, s]) let timeStr = String(format: "%02d:%02d:%02d", h, m, s)
String & Range 的结合
- 在 Swift 中,
String
和 Range
连用时,语法结构比较复杂
- 如果不习惯 Swift 的语法,可以将字符串转换成
NSString
再处理
let helloString = "我们一起飞" (helloString as NSString).substringWithRange(NSMakeRange(2, 3))
let startIndex = helloString.startIndex.advancedBy(0) let endIndex = helloString.endIndex.advancedBy(-1) helloString.substringWithRange(startIndex..<endIndex)
六、集合
数组
for num in numbers { print(num) }
let num1 = numbers[0] let num2 = numbers[1]