iOS Swift 可选(Optionals)类型

Swift的可选类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于x"或者"那儿没有值"。
Swift语言定义后缀?作为命名类型Opetional的缩写,换句话说,以下两种声明是相等的。

        var optionalInteger:  Int?
        var optionalInteger: Optional

在这两种情况下,变量都是可选整数类型。
Optional是一个含有两种情况的枚举,nonesome(Wrapped),用来表示可能有或可能没有值。任何类型都可以明确声明为(或隐式转换)可选类型。


当声明一个可选类型的时候,要确保用括号给?操作符一个合适的范围。

        //表示可选数组,元素类型为Int
        var array :[Int]?;
        //表示数组,元素类型为可选Int
        var array1 :[Int?];
  • 当声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为nil。
  • 如果一个可选类型的实例包含一个值,你可以用后缀操作符!来访问这个值。
  • 可以通过在想调用的属性、方法或下标的可选值后面放一个问号?,来定义一个可选链。就像是在可选值后面放一个叹号!来强制解包它的值一样。它们的区别主要在于当可选值为空时,可选链式只会调用失败,然而强制解包会触发运行时错误。
  • 可选链式调用的返回结果与原本的返回结果具有相同的类型,但是被包装成了一个可选值。例如使用可选链式调用访问属性,当可选链式调用成功时,如果属性原本的返回结果是Int类型,则会变为Int?类型。

面试题
使用guard语句和避免使用强制解包来优化这个函数。

    func divide(dividend: Double?, by divisor: Double?) -> Double? {
        if dividend == .none {
            return .none
        }
        if divisor == .none {
            return .none
        }
        if divisor == 0 {
            return .none
        }
        return dividend! / divisor!
    }

前提条件可以使用guard语句。配合optional binding(可选绑定)
优化后

    func divide(dividend: Double?, by divisor: Double?) -> Double? {
        guard let dividend = dividend, let divisor = divisor, divisor != 0 else {
            return .none
        }
        return dividend / divisor
    }

你可能感兴趣的:(iOS Swift 可选(Optionals)类型)