Swift #12:函数

发布: (2025年12月14日 GMT+8 03:13)
3 min read
原文: Dev.to

Source: Dev.to

函数的定义

函数 是由大括号 ({) 包围、并通过名称标识的代码块。与循环和条件语句中的代码块不同,函数不需要满足任何条件才能工作;只要调用函数,函数内部的代码行就会执行。

一旦调用了函数,程序的执行会进入函数内部,函数执行完毕后返回到调用它的那一行,继续之前的执行流程。

func f1() { // Declaración y definición
    let x = 1 + 2 // 3
}

f1() // Invocación
var counter = 0
while counter  // (código incompleto en el original)

在 Swift 中,函数可以通过在 -> 后指定返回类型并使用关键字 return 来返回值。如果唯一的语句是返回一个值,return 可以省略。

func f2(a: Int, b: Int) -> Int {
    return a + b
}
let x1 = f2(a: 1, b: 2) // 3
let x2 = f2(a: 2, b: 5) // 7
func f3(a: Int, b: Int) -> Int {
    a + b
}

函数重载

只要参数的数量或类型不同,就可以定义多个同名函数。

func f(value: Int) -> Int {
    value + 1
}
func f(value: String) -> Int {
    value.count
}
print(f(value: "Hola")) // 4
print(f(value: 1))      // 2

仅仅重载返回类型会导致歧义:

func f(value: Int) -> Int {
    value + 1
}
func f(value: Int) -> Double {
    Double(value) + 1.0
}
let result = f(value: 1) // Error: Ambiguous use of 'f(value:)'

为了解决这个问题,需要向编译器提供额外的信息:

let result: Double = f(value: 1) // ✅
print(result) // 2.0

泛型函数

当多个函数拥有相同的逻辑但仅在参数类型上有所区别时,可以使用泛型函数:

func f<T>(value: T) -> String {
    "Valor: \(value)"
}
let r1 = f(value: 1)          // "Valor: 1"
let r2 = f(value: "Hola")     // "Valor: Hola"

也可以使用多个泛型类型:

func f<T, U>(value1: T, value2: U) -> String {
    "Valores: \(value1) \(value2)"
}
let r1 = f(value1: 1, value2: 0.5)          // "Valores: 1 0.5"
let r2 = f(value1: "Hola", value2: "Chao")   // "Valores: Hola Chao"

标准库

Swift 中一些预定义的函数和运算符:

  • print(_:) – 在控制台输出一个值。
  • abs(_:) – 整数的绝对值。
  • max(_:_:) – 返回较大的那个值。
  • min(_:_:) – 返回较小的那个值。

用于停止程序执行的函数

(内容待补充)

Back to Blog

相关文章

阅读更多 »

从算法到冒险

《From Algorithms to Adventures》的封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-...