Skip to content

学习 Swift:函数

发布于: at 23:46编辑文章

如何定义函数

在 Swift 中,通过关键字 func 来定义一个函数,紧跟在关键字后面的则是函数名,通过函数名来调用函数。

下面定义了一个函数:

func greet(to: Stirng) -> String {
  let greeting = "你好," + to + "!"
  return greeting
}

print(greet(to: "世界"))

参数和返回值

上述 greet 是一个具有 String 类型的参数的函数,其返回 String 类型的值。

调用时,直接将字符串传递给参数 to 即可。

无参函数

参数可以不定义,这样的函数不接收外部的数据。

func sayHelloWorld() -> String {
  return "Hello, world!"
}

上述 sayHelloWorld 即是一个无参数函数,调用该函数时无需任何传递:

sayHelloWorld()

多个参数的函数

可以定义多个参数:

func greet(person: String, alreadyGreeted: Bool) -> String {
    if alreadyGreeted {
        return greetAgain(person: person)
    } else {
        return greet(person: person)
    }
}

在调用时按顺序传入参数即可。

上述函数的都具有返回值,实际上函数的返回值也可以为空,在 Swift 中没有 Void 这样的定义,不声明返回值类型即可。

func greet(person: String) {
    print("Hello, \(person)!")
}

多返回值

返回值同样可以为多个,通过括号来声明多个返回值的情况,此时返回了一个元组,返回值通过点符号取实际的值:

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)
}

隐式返回

在函数体中,return 关键字在函数体为单语句时是可以省略的,此时 return 会隐式执行。

参数标签

值得一提的是,函数的参数其实包括了标签和名称,标签用于调用,名称在函数内部实现时使用:

func getResponse(_ from: URL, method type: String) {
    // 此时在函数体内部,我们可以使用 from 和 type 这两个参数名称来进行具体的逻辑实现
}
// 在调用时就可以像下面这样,避免了 from 这个参数的重复出现
getResponse(URL(stirng: "https:example.com")!, method: "get")

上述函数在定义时,使用_method作为参数标签,使用_作为参数标签时可以在调用时省略不写。

默认参数值

参数可以有默认值,在函数调用时如果没有向该参数传递值时,函数会使用该默认值。 具有默认值的参数在函数声明时放在参数列表的最后一位。

func calculate(num1: Int, num2: Int = 20) {
    return num1 + num2
}

可变参数

可变参数接受同一类型的零个或多个值,通过在参数类型后面使用...来声明该参数为可变参数。

func getMean(_ nums: Int...) {
    var total = 0
    for num in nums {
        total += number
    }
    return  total / nums.count
}

调用具有可变参数的函数时,直接传入多个同类型的值即可:

getMin(1, 3, 5)

参考

本文的写作参考如下这些文章:

  1. Functions | The Swift Programming Language (6)

下一篇
理解 Swift Charts:基础