Swift 函数
2019-07-03 16:17
1211 查看
- 函数定义与调用
func 方法名(参数)-> 返回值{ }
1)无参数函数
func 方法名()-> 返回值{ }
2)多参数函数
func 方法名(参数1, 参数2, 参数3)-> 返回值{ }
3)无返回值函数
func 方法名(参数1, 参数2, 参数3){ }
4)多重返回值函数
可以用元组(tuple)类型让多个值作为一个复合值从函数中返回。
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) }
5)可选元组返回类型
如果函数返回的元组类型有可能整个元组都“没有值”,你可以使用可选的( optional ) 元组返回类型反映整个元组可以是nil的事实。你可以通过在元组类型的右括号后放置一个问号来定义一个可选元组,例如 (Int, Int)? 或 (String, Int, Bool)?
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) }
6)函数参数标签和参数名称
func someFunction(firstParameterName: Int, secondParameterName: Int) { // 在函数体内,firstParameterName 和 secondParameterName 代表参数中的第一个和第二个参数值 } someFunction(firstParameterName: 1, secondParameterName: 2)
7)指定参数标签
func someFunction(argumentLabel parameterName: Int) { // 在函数体内,parameterName 代表参数值 }
8)忽略参数标签
func someFunction(_ firstParameterName: Int, secondParameterName: Int) { // 在函数体内,firstParameterName 和 secondParameterName 代表参数中的第一个和第二个参数值 } someFunction(1, secondParameterName: 2)
9)默认参数值
func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) { // 如果你在调用时候不传第二个参数,parameterWithDefault 会值为 12 传入到函数体中。 } someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6 someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12
10)可变参数
func JoiningTogether(argrumengs: String...) -> String{ var result = "" for valueStr in argrumengs { result += valueStr } return result } JoiningTogether(argrumengs: "hello ", "world", "!") 注意: 一个函数最多只能拥有一个可变参数。
11)输入输出参数
你只能传递变量给输入输出参数。你不能传入常量或者字面量,因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。
注意 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。
func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA }
var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) print("someInt is now \(someInt), and anotherInt is now \(anotherInt)") // 打印 "someInt is now 107, and anotherInt is now 3" 注意: 输入输出参数和返回值是不一样的。上面的 swapTwoInts 函数并没有定义任何返回值,但仍然修改了 someInt 和 anotherInt 的值。输入输出参数是函数对函数体外产生影响的另一种方式。
- 函数类型
每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。
func addTwoInts(_ a: Int, _ b: Int) -> Int { return a + b } func multiplyTwoInts(_ a: Int, _ b: Int) -> Int { return a * b }
2)使用函数类型
var mathFunction: (Int, Int) -> Int = addTwoInts mathFunction(2, 3)
3)函数类型作为参数类型
func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) { print("Result: \(mathFunction(a, b))") } printMathResult(addTwoInts, 3, 5) // 打印 "Result: 8"
4)函数类型作为返回类型
func stepForward(_ input: Int) -> Int { return input + 1 } func stepBackward(_ input: Int) -> Int { return input - 1 }
func chooseStepFunction(backward: Bool) -> (Int) -> Int { return backward ? stepBackward : stepForward }
var currentValue = 3 let moveNearerToZero = chooseStepFunction(backward: currentValue > 0) // moveNearerToZero 现在指向 stepBackward() 函数。
print("Counting to zero:") // Counting to zero: while currentValue != 0 { print("\(currentValue)... ") currentValue = moveNearerToZero(currentValue) } print("zero!") // 3... // 2... // 1... // zero!
- 嵌套函数
默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。
func chooseStepFunction(backward: Bool) -> (Int) -> Int { func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } return backward ? stepBackward : stepForward } var 18838 currentValue = -4 let moveNearerToZero = chooseStepFunction(backward: currentValue > 0) // moveNearerToZero now refers to the nested stepForward() function while currentValue != 0 { print("\(currentValue)... ") currentValue = moveNearerToZero(currentValue) } print("zero!") // -4... // -3... // -2... // -1... // zero!
相关文章推荐
- swift 函数返回值
- swift map filter reduce函数
- Swift2.0(9)函数的使用(一)
- Swift 函数
- Swift函数
- Swift快速集成函数使用篇(生成二维码)
- Swift学习笔记之字典,循环,可选变量,函数签名,面向对象
- Swift 中的利刃,函数和闭包
- swift 笔记 (六) —— 函数
- Swift 中的函数(上)
- 窥探Swift之函数与闭包的应用实例
- swift中函数使用
- [Swift系列]003- 函数
- Swift -- __FUNCTION__ ,__FILE__等函数
- 【swift-总结】函数
- IOS_swift_函数用法
- swift基础(一) 变量和常量和函数
- swift学习笔记之函数(一)
- 苹果新的编程语言 Swift 语言进阶(六)--函数和闭包
- Swift 函数也有类型type