美文网首页
[对比OC学习swift]--day04可选类型

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

作者: 一声雷 | 来源:发表于2016-02-25 22:43 被阅读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()
    

    相关文章

      网友评论

          本文标题:[对比OC学习swift]--day04可选类型

          本文链接:https://www.haomeiwen.com/subject/ciaikttx.html