Swift函数是用于完成特定任务的独立代码块,它采用统一的语法来表示从简单的C语言风格函数到复杂的Objective-C语言风格方法。函数通过声明来告知编译器其名称、返回类型和参数,并通过定义提供具体的实现逻辑。
在Swift中,使用关键字func来定义函数,可以指定一个或多个输入参数以及一个返回值类型。每个函数都有一个描述其功能的名称,调用时需要按照参数列表的顺序传递相应类型的实参。
以下是一个基本函数定义的示例,该函数接收一个字符串参数并返回字符串:
func runoob(site: String) -> String {
return site
}
print(runoob(site: "www.runoob.com"))
函数调用直接通过函数名和匹配的参数进行。Swift支持多参数函数,参数之间以逗号分隔:
func runoob(name: String, site: String) -> String {
return name + site
}
print(runoob(name: "菜鸟教程:", site: "www.runoob.com"))
函数也可以不带任何参数,直接返回一个固定值:
func sitename() -> String {
return "菜鸟教程"
}
Swift允许使用元组作为函数返回值,以便从单个函数中返回多个值。例如,定义一个函数来查找整数数组的最小值和最大值:
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)
}
为处理空数组的情况,可以返回可选元组类型,在数组为空时返回nil。
如果函数不需要返回值,可以省略返回类型定义。这类函数通常用于执行操作而非计算值:
func runoob(site: String) {
print("菜鸟教程官网:\(site)")
}
函数参数涉及局部参数名和外部参数名。局部参数名仅在函数体内使用,而外部参数名用于函数调用时标识参数。例如:
func pow(firstArg a: Int, secondArg b: Int) -> Int {
var res = a
for _ in 1..<b {
res = res * a
}
return res
}
调用时必须使用外部参数名:pow(firstArg:5, secondArg:3)。
可变参数允许函数接受数量不定的输入值,通过在参数类型后添加...来定义:
func vari<N>(members: N...) {
for i in members {
print(i)
}
}
默认情况下,函数参数是常量,不能在函数体内修改。但使用inout关键字可以声明变量参数,使其值可变。调用时需在变量前添加&符号:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
var x = 1
var y = 5
swapTwoInts(&x, &y)
每个函数都有特定的函数类型,由参数类型和返回类型组成。函数类型可以像其他类型一样使用,例如赋值给变量或作为参数传递:
func sum(a: Int, b: Int) -> Int {
return a + b
}
var addition: (Int, Int) -> Int = sum
print(addition(40, 89))
函数类型可以作为另一个函数的参数类型或返回类型,这增强了代码的灵活性。例如:
func another(addition: (Int, Int) -> Int, a: Int, b: Int) {
print("输出结果: \(addition(a, b))")
}
another(addition: sum, a: 10, b: 20)
Swift还支持函数嵌套,即在一个函数内部定义另一个函数。外部函数可以调用内部函数,这有助于封装功能:
func calcDecrement(forDecrement total: Int) -> () -> Int {
var overallDecrement = 0
func decrementer() -> Int {
overallDecrement -= total
return overallDecrement
}
return decrementer
}
let decrem = calcDecrement(forDecrement: 30)
print(decrem())
通过理解这些核心概念,开发者可以有效地利用Swift函数来构建模块化、可重用的代码结构。