美文网首页
Swift5.0笔记 - 5. 可选项(Optional)

Swift5.0笔记 - 5. 可选项(Optional)

作者: 南城同學 | 来源:发表于2020-11-13 09:03 被阅读0次

    1) 定义

    • 常规方式字面量置为nil,会报错;
      nil.png
    • 可选项,一般也叫可选类型,它允许将值设置为nil;
    • 在类型名称后面加个问号 ? 来定义一个可选项;
    var name: String? = "Bob"
    name = nil
    
    var age01: Int? // 可选值默认就是nil
    age = 10
    age = nil
    
    var age02: Int  //没有初始值
    
    
    • 应用一:数组越界
    var array = [1, 15, 40, 29]
    func get(_ index: Int) -> Int? {
        if index < 0 || index >= array.count {
            return nil
        }
        return array[index]
    }
    print(get(1)) // Optional(15)
    print(get(-1)) // nil
    print(get(4)) // nil
    

    2)强制解包(Forced Unwrapping)

    • 可选项是对其他类型的一层包装,可以理解为一个盒子;
    • 如果为nil,那么它是一个空盒子;
    • 如果不为nil,那么盒子里装的是:被包装类型的数据;
      Forced Unwrapping.png
    • 如果要从可选项中取出被包装的数据(将盒子里装的东西取出来),需要使用感叹号进行强制解包。
    var age: Int? = 10
    var ageInt: Int = age!
    ageInt += 10
    

    注意:

    1. age: Int 这是一个Int类型,age: Int?不是一个Int类型,是一个盒子;

    • 所以下面的运算会出错


      age:Int.png
    • 更正:
    var age: Int? = 10
    var num = age! + 10
    print(age) //Optional(10)
    
    • 进行强制解包操作,只不过是把age里面的10用一下,盒子里面依然是装着这个10的;*

    2. 如果对值为nil的可选项(空盒子)进行强制解包,将会产生运行时错误。

    var age: Int?
    age!
    
    • error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

    3)判断可选项是否包含值

    举例:

    • 将"123"强转成Int类型,
    var number = Int("123")
    
    • number可能会空,所以它的类型为可选项;
      可选项.png
    • 综合:
    let number = Int("123")
    if number != nil {
        print("字符串转换整数成功:\(number!)") //取的时候要解包
    } else {
        print("字符串转换整数失败")
    }
    //字符串转换整数成功:123
    

    4)可选项绑定(Optional Binding)

    待续

    相关文章

      网友评论

          本文标题:Swift5.0笔记 - 5. 可选项(Optional)

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