if语句和optional

作者: Hollylord | 来源:发表于2015-12-15 14:45 被阅读328次

    因为当这个if和optional一起用的时候,很容易混淆,这里题主好好做一个详细的解释。

    强制解包

    在可选类型的后面加个感叹号!,就可以把可选类型的值取出来,赋值给具体类型
    下面的写法是正确的

    var num :Int? =10
    var numValue :Int =num!
    // 将num中的值取出来,赋值给numValue
    

    感叹号!的意思是告诉编译器:我确定可选类型里面有值,可以将值取出来了。当然啦,如果为nil,就崩溃咯。

    隐式解包

    被声明为隐式解包的可选类型不用进行强制解包能够自动解包:自动把可选类型的值取出来赋给具体类型

    • 如何声明一个隐式解包的可选类型
      将 问号?改为 感叹号!即可
    var num :Int! =20
    var numValue :Int =num // 自动解包,不用再使用! 进行强制解包
    // num是被声明为隐式解包的可选类型Int!
    
    • 隐式解包的原理和应用
      隐式解包的原理
      相当于告诉编译器:这个可选类型的值一直都存在,绝对能取出里面的值
      所以取值时可以不用加感叹号!,能够自动解包

    选择绑定

    • 选择绑定的作用
      用来确定一个可选类型的值是否存在
      如果值存在,把该值赋给一个临时常量\变量
      如果值不存在,就不创建任何临时常量\变量
    • 选择绑定的应用
    if let num ="156".toInt() {
        println("num的值存在,是\(num)")
    } else {
       println("num的值不存在")
    }
    

    如果"156".toInt()的值存在
    就把值赋给临时常量num,执行第1 ~ 3行的大括号之间的代码
    如果"156".toInt()的值不存在
    就不创建临时常量num,执行第3 ~ 5行的大括号之间的代码
    注意:
    这里的num是Int类型,不是Int?类型
    num的作用域是第13行的大括号之间,不能用在第35行的大括号之间

    相关文章

      网友评论

        本文标题:if语句和optional

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