Swift 函数怎么定义和使用?
函数是一组组织在一起的语句用于执行特定任务。Swift 函数可以像简单的 C 函数一样简单也可以像 Objective-C 语言函数一样复杂。它允许我们在函数调用中传递局部和全局参数值。此外我们可以在另一个函数内部定义函数以将其功能封装在另一个函数中。函数在代码结构化、模块化和提高代码可读性方面发挥重要作用。它们还提供了诸如参数标签、默认参数值、可变参数和多种返回类型等各种特性。Swift 中的函数定义在 Swift 中函数使用 func 关键字定义。当新定义一个函数时它可以接受一个或多个值作为输入“参数”传递给函数并在主体中处理这些函数然后将值作为输出“返回类型”返回给函数。每个函数都有一个函数名用于描述函数执行的任务。要使用函数您需要使用其名称“调用”该函数并传递与函数参数类型匹配的输入值称为 arguments。函数参数也被称为“tuples”。函数的 arguments 必须始终按照函数参数列表的相同顺序提供返回值后跟 -。语法以下是创建函数的语法 −func funcname(Parameters) - returntype { Statement1 Statement2 --- Statement N return parameters }示例Swift 程序演示如何创建函数。// 有返回类型的函数 func student(name: String) - String { return name } print(student(name: First Program)) print(student(name:About Functions))输出它将产生以下输出 −First Program About FunctionsSwift 中调用函数调用函数意味着执行函数内部的语句集。我们可以通过函数名调用函数在调用时必须提供所有 arguments如果有。假设我们定义了一个名为 display 的函数例如为了显示数字首先用持有 integer 数据类型的参数 no1 初始化名为 display 的函数。然后将参数 no1 分配给参数 a此后 a 将指向相同的数据类型 integer。现在参数 a 返回给函数。这里 display() 函数将持有 integer 值并在每次调用函数时返回 integer 值。语法以下是调用函数的语法 −funcName(parameters)示例Swift 程序演示如何调用函数。// 创建函数 func display(no1: Int) - Int { let a no1 return a } // 调用函数 print(display(no1: 100)) print(display(no1: 200))输出它将产生以下输出 −100 200Swift 中函数参数的类型参数是在函数声明中指定的变量用于在调用函数时获取输入。或者它们允许我们在调用函数时向函数传递值并对这些值执行操作。它们总是与标签、类型和值如果有一起在函数内部指定。Swift 函数支持以下类型的参数 −常规参数可变参数输入输出参数让我们详细讨论所有类型的参数。常规参数常规参数是函数中最常用的参数类型。它们允许我们根据指定的值执行基本操作。一个函数可以有一个或多个常规参数。每个常规参数都有其参数标签、显式类型并且它们由逗号分隔。我们也可以在常规参数中指定默认值这意味着如果我们在调用该函数时省略该参数则该参数中的默认值将被使用。语法以下是常规参数的语法 −func funcname(name1: Type, name2:Type defualtValue) - returntype { Statement return value }示例Swift 程序演示如何创建带有常规参数的函数。// 创建带有常规参数和默认值的函数 func Sum(num1: Int, num2: Int 2) - Int { var result 0 result num1 num2 return result } // 调用函数 print(Sum 1:, Sum(num1: 10)) print(Sum 2:, Sum(num1: 20, num2: 12))输出它将产生以下输出 −Sum 1: 12 Sum 2: 32可变参数Swift 提供了一种特殊类型的参数称为可变参数。可变参数允许我们在函数中接受相同类型的多个输入值。这种参数在我们要向函数传递任意数量的相同类型值而无需指定确切数量时非常有用。一个函数可以包含多个可变参数在第一个可变参数之后后续的可变参数必须包含参数标签以区分它们。传递到可变参数中的值在函数中以数组形式可用。可变参数不能标记为 inout。语法以下是可变参数的语法 −func funcname(_name1: Type, name2:Type, name3: Type) - returntype { Statement return value }示例Swift 程序演示如何创建带有可变参数的函数。// 创建带有可变参数的函数 func Product(_ num: Int...) - Int { var result 1 for x in num{ result * x } return result } // 调用函数并传递相同类型的多个值 print(Product:, Product(10, 20, 30))输出它将产生以下输出 −Product: 6000输入输出参数Swift 中的输入输出参数提供了即使在函数调用后修改其值仍然保留参数值功能。在函数参数定义的开头声明 inout 关键字来保留成员值。它得名 inout因为其值被 in 传递到函数中其值被函数体访问和修改然后 out 返回函数以修改原始参数。输入输出参数不包含默认值。只有变量被作为输入输出参数的参数传递因为只有它们的值在函数内部和外部被修改。因此无需将字符串和字面量声明为输入输出参数。变量名前面的 表示我们正在将参数传递给输入输出参数。语法以下是输入输出参数的语法 −func funcname(_name1: inout Type, _name2: inout Type) - returntype { Statement return value }示例Swift 程序演示如何创建带有输入输出参数的函数。// 交换两个值的函数 func swap(_ x: inout Int, _ y: inout Int) { let temp x x y y temp } var p 15 var q 10 print(Before swapping: p \(p), q \(q)) swap(p, q) print(After swapping: p \(p), q \(q))输出它将产生以下输出 −Before swapping: p 15, q 10 After swapping: p 10, q 15Swift 中的函数参数标签和参数名函数可以为其参数和形参指定标签和名称。这些标签和名称为参数和形参提供了清晰且描述性的上下文。参数名用于函数的声明而参数标签则在调用函数时使用。默认情况下参数标签和参数名是相同的但多个参数可以具有相同的或唯一的参数标签。参数名应该是唯一的以便函数能够轻松区分它们。我们还可以通过在参数名前放置下划线_来省略参数标签。语法以下是参数标签和参数名的语法 −// 带参数标签的参数名 func funcname(argumentLabel parameterName: Type, parameterName: Type) - returntype { Statement return value } funcname(name1:value, name2: value) // 不带参数标签的参数名 func funcname(_name1: Type, _name2: Type) - returntype { Statement return value } funcname(value1, value2)示例Swift 程序演示如何在函数中指定参数名和参数标签。// 函数 1带参数名和参数标签 func pow(firstArg a: Int, secondArg b: Int) - Int { var res a for _ in 1..b { res res * a } return res } print(Power:, pow(firstArg:5, secondArg:3)) // 函数 2带参数名但不带参数标签 func product(_ a: Int, b: Int) - Int { let res a * b return res } print(Product:, product(5, b:3))输出它将产生以下输出 −Power: 125 Product: 15Swift 中的参数和返回值Swift 提供了灵活的函数参数及其返回值从简单值到复杂值。我们可以创建各种形式的函数例如 −带参数的函数不带参数的函数带返回类型的函数不带返回类型的函数带可选返回类型的函数让我们详细讨论所有形式的函数。带参数的函数通过将参数值传递给函数体来访问函数。我们可以在函数内部传递单个或多个参数值每个参数都有自己的标签以便编译器能够识别哪个对应哪个参数。语法以下是带参数的函数语法 −func funcname(para1: Type, para2: Type) - datatype { return datatype }示例Swift 程序创建带参数的函数。// 带两个参数的函数 func mult(no1: Int, no2: Int) - Int { return no1 * no2 } // 调用函数 print(mult(no1: 2, no2: 20)) print(mult(no1: 3, no2: 15)) print(mult(no1: 4, no2: 30))输出它将产生以下输出 −40 45 120不带参数的函数我们也可以定义不带任何参数的函数。此类函数在需要封装不依赖任何外部输入的代码块时非常有用。语法以下是不带参数的函数语法 −func funcname() - datatype { return datatype }示例Swift 程序创建不带参数的函数。// 不带参数的函数 func votersname() - String { return Alice } // 调用函数 print(votersname())输出它将产生以下输出 −Alice带返回值的函数函数还用于返回 string、integer 和 float 数据类型的返回值。它可以返回单个或多个值。如果函数返回多个值则使用 tuple 返回多个值。语法以下是带返回值的函数语法 −func funcname(para1: Type, para2: Type) - datatype { return datatype }示例Swift 程序创建返回值的函数。// 函数用于找出给定数组中的最大值和最小值 func ls(array: [Int]) - (large: Int, small: Int) { var lar array[0] var sma array[0] // 将值与其前一个值进行比较 for i in array[1..array.count] { // 如果值小于前一个值则存储在 sma 参数中 if i sma { sma i } // 否则存储在 lar 参数中 else if i lar { lar i } } // 使用 tuple 返回多个值 return (lar, sma) } let num ls(array: [40, 12, -5, 78, 98]) print(Largest number is: \(num.large) and smallest number is: \(num.small))输出它将产生以下输出 −Largest number is: 98 and smallest number is: -5不带返回值的函数某些函数可能在函数内部声明参数但不带任何返回值语法以下是不带返回类型的函数语法 −func funcname(para1: Type, para2: Type){ return datatype }示例Swift 程序创建不返回值的函数。// 带参数但无返回类型的函数 func sum(a: Int, b: Int) { let a a b let b a - b print(a, b) } sum(a: 20, b: 10) sum(a: 40, b: 10) sum(a: 24, b: 6)输出它将产生以下输出 −30 20 50 40 30 24带可选返回类型的函数Swift 引入了 optional 特性通过安全措施来消除问题。Optional 用于检查 nil 或垃圾值从而节省大量调试时间使代码更高效且易于用户阅读。例如我们声明函数返回值类型为 integer但如果函数返回 string 值或 nil 值会发生什么。在这种情况下编译器将返回错误值。optional 就是为了解决这些问题而引入的。Optional 函数将采用两种形式 value 和 nil。我们将使用保留字符 ? 来标记 Optionals以检查 tuple 是返回值为还是 nil 值。示例Swift 程序创建返回 optional 类型的函数。// 带可选返回类型的函数 func minMax(array: [Int]) - (min: Int, max: Int)? { if array.isEmpty { return nil } 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) } if let bounds minMax(array: [8, -6, 2, 109, 3, 71]) { print(min is \(bounds.min) and max is \(bounds.max)) }输出它将产生以下输出 −min is -6 and max is 109函数类型在 Swift 中function type 用于表示函数的类型以及其参数类型和返回类型。function type 允许我们以类型安全的方式创建、传递和使用函数作为变量或参数。参数类型表示将存储在函数中的参数类型而返回类型表示函数将返回的值类型。示例Swift 程序演示 function type。func inputs(no1: Int, no2: Int) - Int { return no1/no2 } print(inputs(no1: 20, no2: 10)) print(inputs(no1: 36, no2:6))输出它将产生以下输出 −2 6将函数赋值给变量Swift 中的函数是 first-class citizens。因此我们可以将函数赋值给变量就像将值赋值给变量一样。将函数赋值给变量后该变量将持有该函数的引用。语法将函数赋值给变量的语法如下 −var addition: (Int, Int) - Int sum这里 sum 是一个函数名具有整数变量 a 和 b现在被声明为变量 addition 的函数名。此后addition 和 sum 函数都具有相同数量的整数数据类型的参数并且都返回整数值作为引用。示例Swift 程序演示如何将函数赋值给变量。// 函数 func sum(a: Int, b: Int) - Int { return a b } // 将函数赋值给变量 var addition: (Int, Int) - Int sum print(Result: \(addition(40, 89)))输出它将产生以下输出 −Result: 129函数类型作为参数类型在 Swift 中我们可以将 function type 用作另一个函数的参数类型这意味着我们可以将一个函数作为参数传递给另一个函数。示例Swift 程序演示如何将函数作为参数传递给另一个函数。// 函数类型是 (Int, Int) - Int func add(_ x: Int, _ y: Int) - Int { return x y } // 函数类型作为参数 func Display(_ myOperation: (Int, Int) - Int, _ p: Int, _ q: Int) - Int { return myOperation(p, q) } // 将函数作为参数传递 let sum Display(add, 5, 7) print(Sum: \(sum))输出它将产生以下输出 −Sum: 12函数类型作为返回类型在 Swift 中我们可以将 function type 用作另一个函数的返回类型这意味着一个函数可以从另一个函数返回。示例Swift 程序演示一个函数如何返回另一个函数。// 函数类型是 (Int, Int) - Int func add(_ x: Int, _ y: Int) - Int { return x y } // Display() 函数将返回 add() 函数 func Display()-(Int, Int) - Int { return add } let myFunc Display() let result myFunc(9, 2) print(Sum: \(result))输出它将产生以下输出 −Sum: 11