03 高级函数

1。函数作为返回值

任意多参函数都可以柯里化,
a->b->c可以理解为 a->(b->c)
swift中 (A,B)->C可以转化为(A) ->( B -> C)(B) -> (A -> C)
一个函数可以经过简单的转化为三个函数

func add(a:Int,b:Int)->Int{
    return a + b
}

add(3, b: 5)

func add1(a:Int)->Int->Int{
    return { b in
        return a + b
    }
}

add1(3)(5)

func add3(a:Int)->Int->Int->Int{
    return { b in
        return { c in
            return a + b + c
        }
    }
}
add3(3)(5)(6)
 //14
add3(3)
//Int ->Int->Int

柯里化带来的好处是可以不全调用一个函数得到一个新的函数
未柯里化的函数要调用这个函数,要闭包才能调用,而柯里化直接就可以调用

[1,2,3,4,5,6].map(add1(3))
//[4, 5, 6, 7, 8, 9]
[1,2,3,4,5,6].map(add1(4))
//[5, 6, 7, 8, 9, 10]
[1,2,3,4,5,6].map { i in
    add(i,b:3)
}
//[4, 5, 6, 7, 8, 9]

2。函数作为参数

函数是对于过程的抽象,函数作为参数就是对于函数的抽象

//数组中只留大于3的数 函数
func great3(arr:[Int])->[Int]{
    var arr1 = [Int]()
    for i in arr{
        if i > 3{
            arr1.append(i)
        }
    }
    return arr1
}

//数组中只保留被2整除的函数
func mod2Equ0(arr:[Int])->[Int]{
    var arr1 = [Int]()
    for i in arr{
        if i % 2 == 0{
            arr1.append(i)
        }
    }
    return arr1
}

//filter函数
func filter(arr:[A],include: A -> Bool) -> [A]{
    var arr1 = [A]()
    for i in arr{
        if include(i){
            arr1.append(i)
        }
    }
    return arr1
}

3。函数组合

4。swfit 中的高级函数

你可能感兴趣的:(03 高级函数)