函数是执行特定任务的独立的代码块。可以给函数一个名称来识别它的作用,并且该名称用于在需要时“调用”该函数以执行其任务。Swift的统一函数语法足够灵活,可以表达任何东西,从没有参数名称的简单C风格函数到每个参数的名称和参数标签的复杂Objective-C风格方法。参数可以提供默认值来简化函数调用,并且可以作为进出参数传递,一旦函数完成执行,这些参数就会修改传递的变量。Swift中的每个函数都有一个类型,由函数的参数类型和返回类型组成。您可以像Swift中的任何其他类型一样使用此类型,这使得您可以轻松地将函数作为参数传递给其他函数,并从函数返回函数。函数也可以写在其他函数中,以封装嵌套函数范围内的有用功能。
定义和调用函数
函数声明:告诉编译器函数的名字,返回类型及参数
函数定义:提供函数的实体
swift函数包含了参数类型及返回值类型
swift函数定义使用func 关键字。当你定义函数时,可以指定一个或多个输入参数类型和一个返回值类型。
每个函数都有一个函数名来描述它的功能。通过函数名及参数值来调用这个函数,函数的参数传递的顺序必须与参数列表相同。
函数的实参传递的顺序必须与形参列表相同,-> 后定义函数的返回值类型。
定义函数
调用函数
我们也可以定义不带参数的函数:
没有返回值的函数:
如果我们需要返回多个值,可以使用元组作为函数的返回值。
函数参数
函数参数都有一个外部参数名和一个局部参数名。
局部参数名在函数的实现内部使用,在局部参数名前指定外部参数名,中间以空格分隔,外部参数名用于在函数调用时传递给函数的参数。
可变参数
可变参数可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数,其数量是不确定的。
可变参数通过在变量类型名后面加入(...)的方式来定义。
常量、变量、I/O参数
一般默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。如果想要声明一个变量参数,可以在参数定义前加 inout 关键字,这样就可以改变这个参数的值了。
一般默认的参数传递都是传值调用的,而不是传引用。所以传入的参数在函数内改变,并不影响原来的那个参数。传入的只是这个参数的副本。当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。
I/O参数与从函数返回值不同。上面的swap示例没有定义返回类型或返回值,但它仍然修改了some和another的值。I/O参数是函数在其功能主体范围之外产生影响的另一种方式。
I/O参数不能有默认值,变量参数不能使用inout。
函数类型及使用
每个函数都有种特定的函数类型,由函数的参数类型和返回类型组成。
在 Swift 中,使用函数类型就像使用其他类型一样。例如,你可以定义一个类型为函数的常量或变量,并将适当的函数赋值给它:
var addition: (Int, Int) -> Int = sum
func sum(a: Int, b: Int) -> Int {
return a + b
}
var addition: (Int, Int) -> Int = sum
print("输出结果: \(addition(1, 2))") // 输出结果: 3
函数也可以作为另外一个函数的参数,也可以使用函数类型作为另一个函数的返回类型。
函数嵌套
函数嵌套指的是函数内定义一个新的函数,外部的函数可以调用函数内定义的函数。
默认情况下,嵌套函数对外部世界隐藏,但仍然可以由其封闭函数调用和使用。封闭函数也可以返回其嵌套函数之一,以允许嵌套函数在另一个作用域中使用。









网友评论