[对比OC学习swift]--day04可选类型
2016-02-25 本文已影响55人
一声雷
注意:swift中不能随意给一个对象赋值为nil。
在OC中我们可以给一个对象类型变量赋值为nil或者是一个对象;而在swift中如果想给一个变量赋值为nil,那么必须明确指定为可选类型才可以,也就是说普通变量是不能赋值为nil 的。
可选类型如何定义一个可选类型:
Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:
var optionalInteger: Int?
var optionalInteger: Optional<Int>
注意:swift中的可选类型的值是不能直接进行使用的。
使用前,要进行以下任意一种方式进行处理。
1.强制解包
怎么进行强制解包:变量名称 + !
let number1 : Int? = 10
let number2 : Int = 20
let sum = number1! + number2
弊端:如果这个可选类型为nil
,我们进行强制解包,那么就会报错。
2.if(可选绑定)
为了解决强制解包的弊端,我们可以使用可选绑定来解决。
var str1 : String? = "yishenglei"
if let aaa = str1 // 如果str1值为nil,表示条件不成立,就不会来到大括号中
{
print(str1)
}
弊端:嵌套太严重
let v1 : Int? = 10
let v2 : Int? = 20
let v3 : Int? = 30
if let n1 = v1
{
if let n2 = v2
{
if let n3 = v3
{
let sum0 = n1 + n2 + n3
}
}
}
3.guard(守护者)
- 作用:类似可选绑定
- 只有条件为假,才会执行else后面的大括中的代码。
let v1 : Int? = 10
let v2 : Int? = 20
let v3 : Int? = 30
func test01()
{
guard let m1 = v1 else
{
print("v1没有值")
return
}
guard let m2 = v2 else
{
print("v2没有值")
return
}
guard let m3 = v3 else
{
print("v3没有值")
return
}
print(m1 + m2 + m3) // 能执行这一步,说明v1,v2,v3都不为空
}
test01()