美文网首页
swift闭包(个人理解)

swift闭包(个人理解)

作者: 怪客半 | 来源:发表于2017-10-13 10:06 被阅读6次

参考:
Swift高阶函数:Map,Filter,Reduce等-Part 1

闭包产生过程:

第一步

函数参数

//平方计算
func square(a: Float) -> Float {
    return a*a
}
//立方计算
func cube(a: Float) -> Float {
    return a*a*a
}

func averageOfFunction(a: Float,b: Float,f:((Float) -> Float)) -> Float {
    return (f(a) + f(b))/2
}

let one = averageOfFunction(a: 3, b: 4, f: square(a:))
let two = averageOfFunction(a: 3, b: 4, f: cube(a:))

averageOfFunction函数包含3个参数:a,b类型为浮点型数,f的类型为函数(函数的参数为一个浮点型数,返回值为一个浮点型数)

第二步

使用闭包来替代其中的函数参数

let three = averageOfFunction(a: 3, b: 4, f: {(x: Float) -> Float in return x*x*x})
print(three)

闭包的最外层使用大括号,原先的函数实现部分的大括号用in来替代

第三步

简化:省略闭包内参数类型的声明和返回值声明
编译器能够推断出averageOfFunction期望传入作为参数的函数需要接收一个float值,然后返回另一个float值

let four = averageOfFunction(a: 3, b: 4, f: {x in return x*x})
print(four)
第四步

简化:省略return语句

let five = averageOfFunction(a: 3, b: 4, f: {x in x*x})
print(five)
第五步

简化:使用默认参数名$0

let six = averageOfFunction(a: 3, b: 4, f: {$0 * $0})
print(six)
练习
let mapArray = [1,7,4,8,2]

func add1(a: Int) -> String {
    return "\(a)个"
}

func newArr(a: [Int]) -> [String] {
    var new = [String]()
    for b in a {
        new.append("\(b)个")
    }
    return new
}

let mapArray2 = newArr(a: mapArray)

func newArr2(a: [Int],f: ((Int) -> String)) -> [String] {
    var new = [String]()
    for b in a {
        new.append(f(b))
    }
    return new
}

let mapArray3 = newArr2(a: mapArray, f: add1(a:))

let mapArray4 = newArr2(a: mapArray, f: {(b: Int) -> String in return "\(b)个"})
print(mapArray4)

let mapArray5 = newArr2(a: mapArray, f: {b in return "\(b)个"})
print(mapArray5)

let mapArray6 = newArr2(a: mapArray, f: {b in "\(b)个"})
print(mapArray6)

let mapArray7 = newArr2(a: mapArray, f: {"\($0)个"})
print(mapArray7)

相关文章

  • swift闭包(个人理解)

    参考:Swift高阶函数:Map,Filter,Reduce等-Part 1 闭包产生过程: 第一步 函数参数 a...

  • 无标题文章

    个人理解swift中的闭包就是oc中的block [1]声明一个闭包: var closureName: (Par...

  • 在swift中如何声明闭包(closure)

    个人理解swift中的闭包就是oc中的block [1]声明一个闭包: var closureName: (Par...

  • Swift闭包理解

    基本 实际理解 调用 循环引用 解除循环引用

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • 14-Swift中的闭包

    闭包的介绍 闭包和OC中的Block非常相似(通俗点说:你也可以这么理解,Swift的闭包就是OC中的Block)...

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • 100 Days of Swift - Day 06 - 闭包(

    100 Days of Swift - Day 06 - 闭包Closures 6.1 闭包 Swift函数也属于...

网友评论

      本文标题:swift闭包(个人理解)

      本文链接:https://www.haomeiwen.com/subject/fdoayxtx.html