可选的元组返回类型

防止异常获取发生

Posted by Joker Hook on May 1, 2022

如果要从函数返回的元组类型有可能对整个元组具有“无值”,您可以使用可选的元组返回类型来反映整个元组可以为nil的事实。您通过在元组类型的结束括号后放置问号来编写可选的元组返回类型,例如(Int,Int)?或者(String,Int,Bool)?

标注

可选的元组类型,如(Int,Int)?不同于包含可选类型的元组,如(Int?,Int?)。对于可选的元组类型,整个元组是可选的,而不仅仅是元组中的每个单个值。

文章具有多个参数返回值的函数中定义了函数minMax(array:),该函数返回一个包含两个Int值的元组。然而,该功能不会对传递的数组进行任何安全检查。如果数组参数包含空数组,则定义的minMax(array:)函数将在尝试访问数组[0]时触发运行时错误。

要安全地处理空数组,请使用可选的元组返回类型编写minMax(array:)函数,并在数组为空时返回零值:

func minMax(array: [Int]) -> (min: Int, max: Int)? {
    if array.isEmpty { return nil }
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}

您可以使用可选绑定来检查此版本的minMax(array:)函数是返回实际元组值还是nil

if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
    print("min is \(bounds.min) and max is \(bounds.max)")
}
// Prints "min is -6 and max is 109