Swift函数详解:定义、调用、参数与高级用法

Viewed 0

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函数来构建模块化、可重用的代码结构。

0 Answers