一、变量和常量
定义
let
定义常量,一经赋值不允许再修改
var
定义变量,赋值之后仍然可以修改
自动推导
- Swift能够根据右边的代码,推导出变量的准确类型
- 通常在开发时,不需要指定变量的类型
- 如果要指定变量,可以在变量名后使用:,然后跟上变量的类型
重要技巧:Option + Click 可以查看变量的类型
没有隐式转换!!!
- Swift 对数据类型要求异常严格
- 任何时候,都不会做隐式转换
如果要对不同类型的数据进行计算,必须要显式的转换
let x2 = 100 let y2 = 10.5 let num1 = Double(x2) + y2 let num2 = x2 + Int(y2)
let & var 的选择
- 应该尽量先选择常量,只有在必须修改时,才需要修改为
var
- 在 Xcode 7.0 中,如果没有修改变量,Xcode 会提示修改为
let
二、Optional 可选类型
Optional
是 Swift 的一大特色,也是 Swift 初学者最容易困惑的问题
- 定义变量时,如果指定是
可选的
,表示该变量可以有一个指定类型的值,也可以是 nil
- 定义变量时,在类型后面添加一个
?
,表示该变量是可选的
- 变量可选项的默认值是
nil
- 常量可选项没有默认值,主要用于在构造函数中给常量设置初始数值
- 如果 Optional 值是
nil
,不允许参与计算
- 只有
解包(unwrap)
后才能参与计算
- 在变量后添加一个
!
,可以强行解包
注意:必须要确保解包后的值不是 nil,否则会报错
常见错误
unexpectedly found nil while unwrapping an Optional value
翻译
在[解包]一个可选值时发现 nil
??
运算符
??
运算符可以用于判断 变量/常量
的数值是否是 nil
,如果是则使用后面的值替代
- 在使用 Swift 开发时,
??
能够简化代码的编写
let num: Int? = nil let r1 = (num ?? 0) + 10 print(r1)
三、控制流
if
- Swift 中没有 C 语言中的
非零即真
概念
- 在逻辑判断时必须显示地指明具体的判断条件
true
/ false
- if 语句条件的
()
可以省略
- 但是
{}
不能省略
let num = 200 if num < 10 { print("比 10 小") } else if num > 100 { print("比 100 大") } else { print("10 ~ 100 之间的数字") }
三目运算
- Swift 中的
三目
运算保持了和 OC 一致的风格
var a = 10 var b = 20 let c = a > b ? a : b print(c)
适当地运用三目,能够让代码写得更加简洁
可选类型判断
- 由于可选类型的内容可能为
nil
,而一旦为 nil
则不允许参与计算
- 因此在实际开发中,经常需要判断可选类型的内容是否为
nil
单个可选类型判断
let url = NSURL(string: "http://www.baidu.com")
可选类型条件判断
- 小结
if let
不能与使用 &&
、||
等条件判断
- 如果要增加条件,可以使用
where
子句
- 注意:
where
子句没有智能提示
多个可选类型判断
判断之后对变量需要修改
let oName: String? = "张三" let oNum: Int? = 18 if var name = oName, num = oNum { name = "李四" num = 1 print(name, num) }
guard
guard
是与 if let
相反的语法,Swift 2.0 推出的
let oName: String? = "张三" let oNum: Int? = 18 guard let name = oName else { print("name 为空") return } guard let num = oNum else { print("num