迅捷功能

72 阅读1分钟

本教程属于Swift系列

你的程序的代码被组织成函数。

一个函数是用func 关键字来声明的。

func bark() {
    print("woof!")
}

函数可以分配给结构、类和枚举,在这种情况下我们称之为方法。

一个函数是用它的名字来调用的。

bark()

一个函数可以返回一个值。

func bark() -> String {
    print("woof!")
	  return "barked successfully"
}

并且可以把它赋值给一个变量。

let result = bark()

一个函数可以接受参数。每个参数都有一个名称和一个类型。

func bark(times: Int) {
    for index in 0..<times {
        print("woof!")
    }
}

参数的名称是函数内部的。

当我们调用函数时,我们使用参数的名称,以传递它的值。

bark(times: 3)

当我们调用函数时,我们必须传递所有定义的参数。

这里有一个接受多个参数的函数。

func bark(times: Int, repeatBark: Bool) {
    for index in 0..<times {
        if repeatBark == true {
            print("woof woof!")
        } else {
            print("woof!")
        }            
    }
}

在这种情况下,你以这种方式调用它。

bark(times: 3, repeat: true)

当我们谈论这个函数时,我们不叫它bark() 。我们称它为bark(times🔁)

这是因为我们可以有多个具有相同名称的函数,但参数集不同。

你可以通过使用_ 关键字来避免使用标签。

func bark(_ times: Int, repeatBark: Bool) {
    //...the function body
}

所以你可以用这种方式来调用它。

bark(3, repeat: true)

在Swift和iOS的API中,第一个参数没有标签,而其他参数有标签是很常见的。

如果你能很好地设计函数和参数的名称,这将是一个很好的、富有表现力的API。

你只能从一个函数中返回一个值。如果你需要返回多个值,通常会返回一个元组。

func bark() -> (String, Int) {
    print("woof!")
	  return ("barked successfully", 1)
}

而且你可以把结果赋给一个元组。

let (result, num) = bark()

print(result) //"barked successfully"
print(num) //1

函数可以嵌套在其他函数里面。当这种情况发生时,内部函数对外部函数是不可见的。