Swift可选链

关键词:swift, 可选链

概述

  • 当前可选值可能为nil。
  • 当前可选值调用属性、方法、下标。
  • 当前可选值有值则调用成功,如果为nil,则调用的结果也会返回nil。
  • 多个调用可以连在一起形成一个调用链。
  • 可选链返回的总是一个可选值。
  • 即使是多层可选链调用,也不会返回“更可选”(如:Float??)的情况。

可选链,就是可选值调用属性、方法、下标,形成一个调用链。

示例

class FileClass {
    var name = "uuu"
    func showInfo() {
        print("这里打印点信息:\(self.name)")
    }
    subscript(width: Float, height: Float) -> Float {
        return width * height
    }
}

class HumanClass {
    var file: FileClass?
}

var h0 = HumanClass()

用可选链替代强制解析

使用强制解析的话:

如果file为nil,会直接运行时崩掉。

var nameh = h0.file!.name

使用可选链替代:

解析不成功时,会返回nil,而不是出错。

var nameStr = h0.file?.name

通过可选链可以判断属性赋值是否成功

if (h1.file?.name = "666") != nil {
    print("赋值成功")
} else {
    print("赋值失败")
}

通过可选链可以判断方法是否调用成功

//这里要注意,虽然方法showInfo无返回值,但是可选链返回的是个可选值Void?,而不是Void
if (h1.file?.showInfo()) != nil {
    print("方法调用成功")
} else {
    print("方法调用失败")
}

通过可选链调用下标

if let ss = h2.file?[3, 5] {
    print("调用成功:\(ss)")
} else {
    print("调用失败")
}