Swift #12:函数
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(_:_:)– 返回较小的那个值。
用于停止程序执行的函数
(内容待补充)