Swift 函数中返回多个值


在 Swift 中,您可以使用元组从函数返回多个值。在本文中,您将看到使用元组从函数返回多个值的各种示例。以下是一些更实用的使用 Swift 中的元组返回多个值的函数示例:

示例 1 - 将 URL 解析为其组成部分

import Foundation
func parseURL(urlString: String) -> (scheme: String, host: String, path: String) {
   guard let url = URL(string: urlString) else {
      fatalError("Invalid URL")
   }
   return (url.scheme ?? "", url.host ?? "", url.path)
}
let components = parseURL(urlString: "https://www.example.com/path/to/resource")
print("Scheme:", components.scheme)
print("Host:", components.host)
print("Path:", components.path)

输出

Scheme: https
Host: www.example.com
Path: /path/to/resource

在这个例子中,`parseURL` 函数接受一个表示 URL 的字符串,并返回一个包含 URL 的方案、主机和路径组件的元组。如果 URL 无效,则函数会引发致命错误。

示例 2 - 将字符串拆分为单词并计算其出现次数

import Foundation
func countWords(text: String) -> (words: [String], counts: [String: Int]) {
   let words = text.lowercased().components(separatedBy: CharacterSet.alphanumerics.inverted)
   var counts = [String: Int]()
   for word in words {
      if !word.isEmpty {
         counts[word, default: 0] += 1
      }
   }
   return (words, counts)
}
let text = "Hello, world! This is a test of word counting."
let result = countWords(text: text)
print("Words: \(result.words)")
print("Words count: \(result.counts)")

输出

Words: ["hello", "", "world", "", "this", "is", "a", "test", "of", "word", "counting", ""]
Words count: ["hello": 1, "counting": 1, "a": 1, "is": 1, "test": 1, "this": 1, "world": 1, "of": 1, "word": 1]

在这个例子中,`countWords` 函数接受一段文本字符串,将其拆分为单个单词,并计算每个单词出现的次数。它返回一个包含两个值的元组:一个单词数组和一个将每个单词映射到其计数的字典。请注意,我们将所有单词转换为小写以进行不区分大小写的计数。

示例 3 - 查找数组中的最大值和最小值

import Foundation
func findMinMax(numbers: [Int]) -> (min: Int, max: Int)? {
   guard !numbers.isEmpty else {
      return nil
   }
   var min = numbers[0]
   var max = numbers[0]
   for number in numbers {
      if number < min {
         min = number
      }
      if number > max {
         max = number
      }
   }
   return (min, max)
}
let inputArray = [3, 5, 2, 7, 1, 8]
if let result = findMinMax(numbers: inputArray) {
   print("Array: \(inputArray)")
   print("Min value: \(result.min)")
   print("Max value: \(result.max)")
}

输出

Array: [3, 5, 2, 7, 1, 8]
Min value: 1
Max value: 8

在这个例子中,`findMinMax` 函数接受一个整数数组,并返回一个包含数组中最小值和最大值的元组。如果数组为空,则函数返回 nil。我们使用可选绑定(`if let result = ...`)来处理函数返回 nil 的情况。

示例 4 - 计算统计数据

import Foundation
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
   var min = scores[0]
   var max = scores[0]
   var sum = 0
   for score in scores {
      if score > max {
         max = score
      } else if score < min {
         min = score
      }
      sum += score
   }
   return (min, max, sum)
}
let inputArray = [5, 3, 100, 2, 10]
let statistics = calculateStatistics(scores: inputArray)
print("Input array: \(inputArray)")
print("Min value: \(statistics.min)")
print("Max value: \(statistics.max)")
print("Sum value: \(statistics.sum)")

输出

Input array: [5, 3, 100, 2, 10]
Min value: 2
Max value: 100
Sum value: 120

在这个例子中,`calculateStatistics` 函数接受一个整数数组作为输入,并返回一个包含三个值的元组:最低分数、最高分数和所有分数的总和。要返回元组,我们只需使用 `(value1, value2, value3)` 语法并将每个值用逗号分隔。

然后,您可以使用点语法和相应的属性名称(在本例中为 `statistics.min`、`statistics.max` 和 `statistics.sum`)访问元组中的每个值。

结论

总之,元组是一个简单的 Swift 数据结构,使您可以将多个值组合成单个复合值。元组可用于将多个值作为单个参数传递给函数,或从函数返回多个值。

元组成员可以命名以方便访问,它们可以包含任何类型的值,包括其他元组。元组可以使您的代码更清晰易懂,同时提供一种简单的方法来处理小的、相关的、组合的数据块。

更新于:2023年5月4日

2K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.