一个iOS开发初级菜鸡.png
Swift 基本语法01-Swift简介 Swift 基本语法02-"let"和"var" Swift 基本语法04-"switch"和"for" Swift 基本语法05-"String" Swift 基本语法06-数组和字典
if let
用法1.1 普通if
与if let
的比较
1> 如果常量是可选项(Optional
),if
判断后仍然需要解包(!
)
let name: String? = "老王"
let age: Int? = 10
if name != nil && age != nil {
print(name! + String(age!)) // 输出:老王10
}
2> 如果常量是可选项(Optional
),if let
判断后不需要解包(!
),{ }
内一定有值
let name: String? = "老王"
let age: Int? = 10
// if let 连用,判断对象的值是否为'nil'
if let nameNew = name,
let ageNew = age {
// 进入分支后,nameNew 和 ageNew 一定有值
print(nameNew + String(ageNew)) // 输出:老王10
}
Tips:nameNew
和 ageNew
的作用域仅在{}
中
3> if var
的用法,和if let
的区别就是可以在{}
内修改变量的值
let name: String? = "老王"
let age: Int? = 10
if var nameNew = name,
let ageNew = age {
// 'var'修饰,可以修改'nameNew'的值,'let'修改的不可以修改
nameNew = "老李"
print(nameNew + String(ageNew)) // 输出:老李10
}
guard let
用法1> guard let
和if let
刚好相反,guard let
守护一定有值。如果没有,直接返回。
2> 通常判断是否有值之后,会做具体的逻辑实现,通常代码多
3> 如果用 if let
凭空多了一层分支,guard let
是降低分支层次的办法
4> guard let
语法是 Swift 2.0 推出的
let name: String? = "老王"
let age: Int? = 10
guard let nameNew = name,
let ageNew = age else {
print("姓名 或 年龄 为nil")
return
}
// 代码执行至此, nameNew 和 ageNew 一定有值
print(nameNew + String(ageNew)) // 输出:老王10
if let
和guard let
的命名技巧技巧:取和参数名相同的变量名
1> guard let
演示
override func viewDidLoad() {
super.viewDidLoad()
demo(name: "老王", age: 11)
}
func demo(name: String?, age: Int?) {
guard let name = name,
let age = age else {
print("姓名或年龄为nil")
return
}
/**
* 'name'至此会有两个
* 1.String name('guard let'守护,等号右边的'name')
* 2.String? name('guard let'守护,等号右边的'name')
* 3.这里正常应该选择不带'?'的'name',但是即便是选择了('Optional'的'name'),编译器也会帮你更正过来,这就是取名的技巧
*/
print(name + String(age)) // 输出:老王11('name'和'age'为不带'Optional'的)
}
2> if let
演示
override func viewDidLoad() {
super.viewDidLoad()
demo(name: "老王", age: 11)
}
func demo(name: String?, age: Int?) {
if let name = name,
let age = age {
/**
* 'name'至此只会有两个
* 1.String name('if let'守护,等号右边的'name',仅在'{}'作用域内有效)
* 2.String? name('if let'守护,等号右边的'name')
* 3.这里正常应该选择不带'?'的'name',但是即便是选择了('Optional'的'name'),编译器也会帮你更正过来,这就是取名的技巧
* 4.如果'name'或'age'中有一个为'nil',或者都为'nil',下面就不会输出
*/
print(name + String(age)) // 输出:老王11('name'和'age'为不带'Optional'的)
}
/**
* 'name'至此只会有一个
* 2.String? name(demo(name: String?)中的'name')
* 3.这里正常应该选择不带'?'的'name',但是即便是选择了('Optional'的'name'),编译器也会帮你更正过来,这就是取名的技巧
*/
print("demo(name: String?)中的'name'")
}