天天看点

Swift 函数嵌套

Swift支持函数嵌套,这让在函数中返回其他函数变成了一种可能。不过其中也存在着一些陷阱。

Example 1:

import Foundation
func OuterFunc(a:Int)->(Int)->Int
{
    var start=
    func InnerFunc(b:Int)->Int
    {
        start+=a*b
        return start
    }
    return InnerFunc
}

var funtest=OuterFunc()

print(funtest())    // 10, start = 10 after execute this time
print(funtest())    // 20                

Example 2:

a.

import Foundation

func OuterFunc(a:Int)->Int
{
    var start=
    func InnerFunc(b:Int)->Int
    {
        start+=a*b
        return start
    }
    return InnerFunc()*InnerFunc(a)
}

print(OuterFunc())// return 140 10*(10+4)                

b.

import Foundation

func OuterFunc(a:Int)->Int
{
    var start=
    func InnerFunc(b:Int)->Int
    {
        start+=a*b
        return start
    }
    return InnerFunc(a)*InnerFunc()
}

print(OuterFunc()) //return 56 4*(4+10)                

在以上两个例子中start变量的值会因为之前有过调用而变为非初始值,所以造成了

Example 1:

相同参数返回不同结果。

Example 2:

更改函数调用顺序返回不同结果。

总结:

1.变量要在函数内部(每次调用函数)初始化。

2.如果相同变量返回值不同,排查函数内部使用变量