函数(swift)
Posted 小屁孩~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数(swift)相关的知识,希望对你有一定的参考价值。
输入输出参数(In-Out Parameters)
如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。
定义一个输入输出参数时,在参数定义前加 inout
关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。
你只能将变量作为输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&
符,表示这个值可以被函数修改。
注意: 输入输出参数不能有默认值,而且可变参数不能用 inout
标记。如果你用 inout
标记一个参数,这个参数不能被 var
或者 let
标记。
func swapTwoInts(inout a: Int, inout _ b: Int) { let temporaryA = a a = b b = temporaryA }
这个 swapTwoInts(_:_:)
函数仅仅交换 a
与 b
的值。该函数先将 a
的值存到一个暂时常量temporaryA
中,然后将 b
的值赋给 a
,最后将 temporaryA
幅值给 b
。
你可以用两个 Int
型的变量来调用 swapTwoInts(_:_:)
。需要注意的是,someInt
和 anotherInt
在传入 swapTwoInts(_:_:)
函数前,都加了 &
的前缀:
var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) print("someInt is now \(someInt), and anotherInt is now \(anotherInt)") // prints "someInt is now 107, and anotherInt is now 3"
从上面这个例子中,我们可以看到 someInt
和 anotherInt
的原始值在 swapTwoInts(_:_:)
函数中被修改,尽管它们的定义在函数体外。
注意: 输入输出参数和返回值是不一样的。上面的 swapTwoInts
函数并没有定义任何返回值,但仍然修改了 someInt
和 anotherInt
的值。输入输出参数是函数对函数体外产生影响的另一种方式。
多重返回值函数(Functions with Multiple Return Values)
你可以用元组(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) }
let bounds = minMax([8, -6, 2, 109, 3, 71]) print("min is \(bounds.min) and max is \(bounds.max)") // prints "min is -6 and max is 109"
可选元组返回类型(Optional Tuple Return Types)
为了安全的处理这个"空数组"问题,写一个minMax(_:)
函数使用可选元组返回类型,并且当数组为空时返回nil
:
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) }
你可以选择性的绑定当minMax(_:)
函数返回的是一个实际的元组值还是nil
if let bounds = minMax([8, -6, 2, 109, 3, 71]) { print("min is \(bounds.min) and max is \(bounds.max)") } // prints "min is -6 and max is 109"
以上是关于函数(swift)的主要内容,如果未能解决你的问题,请参考以下文章
如何将这个 Objective-C 代码片段写入 Swift?