[对比OC学习swift]--day04可选类型

注意:swift中不能随意给一个对象赋值为nil。

在OC中我们可以给一个对象类型变量赋值为nil或者是一个对象;而在swift中如果想给一个变量赋值为nil,那么必须明确指定为可选类型才可以,也就是说普通变量是不能赋值为nil 的。

[对比OC学习swift]--day04可选类型_第1张图片
可选类型

如何定义一个可选类型:
Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:

var optionalInteger: Int?
var optionalInteger: Optional

注意: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()

你可能感兴趣的:([对比OC学习swift]--day04可选类型)