很长时间没动swift了,以下纯粹个人学习思路,语言之间的区别主要是鉴于C/C++
边上代码边解析:
1.取数组中的最大最小值
func minMax(array:[Int]) ->(min:Int,max:Int)
{
var currentMin = array[0]
var currentMax = array[0]
for value in array[0..<array.count] {
if(value < currentMin){
currentMin = value
}else if value > currentMax{
currentMax = value
}
}
return (currentMin,currentMax)
}
minMax(array:[1,2,3,4,5])
2.变参函数
//计算任意长度Double型数字串的算数平均数
func averageDouble(numbers:Double...) ->Double
{
var totoal:Double = 0
for number in numbers {
totoal += number
}
return totoal/Double(numbers.count)
}
averageDouble(numbers:1,2,3,4,5)
3.输入输出参数(类似c++传地址)
//输入输出参数不能有默认值,而且可变参数不能用 inout 标记
//交换a,b的值
func swapTwoValue(_ a:inout Int,_ b:inout Int)//() -> Void,没有返回参数,返回 Void 类型的函数。
{
let temp = a
a = b
b = temp
}
var num1 = 3
var num2 = 5
swapTwoValue(&num1, &num2)
print(num1,num2)
4.函数类型(inout Int,inout Int) ->Void
//定义一个叫做 swapFunction 的变量,类型是‘一个有两个 inoutInt 型的参数并返回一个 Void 型的值的函数’,并让这个新变量指向 swapTwoValue 函数
//有相同匹配类型的不同函数可以被赋值给同一个变量,就像非函数类型的变量一样
var swapFunction:(inout Int,inout Int) ->Void = swapTwoValue
swapFunction(&num1,&num2)
print(num1,num2)
5.函数类型作为参数(inout Int,inout Int) ->Void
//printSwapFunction函数不关心spFunction内部的实现,将一部分功能抽离出来由开发者自己实现具有(inout Int,inout Int) ->Void的函数
func printSwapFunction(spFunction:(inout Int,inout Int) ->Void,_ a:inout Int,_ b:inout Int) ->Void
{
print("Result:\(spFunction(&num1,&num2)) \(num1) \(num2)")
}
printSwapFunction(spFunction: swapFunction, &num1, &num2)
printSwapFunction(spFunction: swapTwoValue, &num1, &num2)
6.函数类型作为返回值
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() 函数。currentValue 的初始值是 3,这意味着 currentValue > 0 为真(true),这将使得 chooseStepFunction(_:) 返回 stepBackward(_:) 函数。一个指向返回的函数的引用保存在了 moveNearerToZero 常量中。
print("Counting to zero:")
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
7.嵌套函数
//默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。
func choseStepFunction(backward: Bool) -> (Int) -> Int {
func steForward(input: Int) -> Int { return input + 1 }
func steBackward(input: Int) -> Int { return input - 1 }
return backward ? steBackward : steForward
}
var value = -4
let moveNearToZero = choseStepFunction(backward: value > 0)
// moveNearerToZero now refers to the nested stepForward() function
while value != 0 {
print("\(value)... ")
value = moveNearToZero(value)
}
print("zero!")