Swift基础-函数

    很长时间没动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!")









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值