Swift文档翻译计划 -- 元组

·  阅读 632

具有多个返回值的函数

在 Swift 中如果函数想要返回多个值,可以使用元组类型作为函数的返回类型。下面以 minMax(array:) 函数为例,查找 Int 值数组中的最大和最小的数字:

func minMax(array: [Int]) -> (min: Int, max: Int) {
    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:) 的最小值和最大值:

let bounds = minMax(array: [8, -6, 2, 109, 3, 71])
print("min is \(bounds.min) and max is \(bounds.max)")
// min is -6 and max is 109
复制代码

可选的元组返回类型

在 OC 中,函数内部返回空值可以直接 return nil,在 Swift 中,nil 只能是可选类型,元组同理,如果函数返回的元组可能为空值,可以通过在元组的右括号后放置一个问号来编写一个可选的元组返回类型,例如 (Int, Int)? 或者 (String, Int, Bool)? 。

上面的 minMax(array:) 函数返回一个包含两个 Int 值的元组。但是没有对传递进来的数组进行安全检查。如果是一个空数组,那么 minMax(array:) 函数在尝试访问数组 [0] 时可能会崩溃。这时候就需要定义一个可选的元组返回类型,当数组是空的时候返回 nil:

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)
}
复制代码
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"
复制代码

引用:Functions

分类:
iOS
标签:
收藏成功!
已添加到「」, 点击更改