Swift4 Closure 闭包练习

  • repeatTask
func repeatTask(times: Int, task: () -> Void) {
    for _ in 0..<times {
        task()
    }
}

let task = {
    print("Swift Apprentice is a great book!")
}

1.  最原始的方式
repeatTask(times: 1, task: task)

2. 直接将闭包定义在函数的参数中
repeatTask(times: 1, task: { () -> Void in
    print("Swift Apprentice is a great book!")
})

3. 简化参数和返回值
repeatTask(times: 1, task: {
    print("Swift Apprentice is a great book!")
})

4. 利用尾部闭包的特性,将参数名舍弃,并将闭包移到括号外部,这个是我们最常用的方式。
repeatTask(times: 1) {
    print("Swift Apprentice is a great book!")
}
  • 数学计算
//方法1
func mathSum(length: Int, series: (Int) -> Int) -> Int {
  var result = 0
  for i in 1...length {
    result += series(i)
  }
  return result
}

//方法2
func mathSum(length: Int, series: (Int) -> Int) -> Int {
  return (1...length).map { series($0) }.reduce(0, +)
}

//1. 调用方法1
mathSum(length: 10) { number in
  number * number
}

//2.调用方法2
mathSum(length: 10) {
  $0 * $0
}
  • 字典处理
let appRatings = [
  "Calendar Pro": [1, 5, 5, 4, 2, 1, 5, 4],
  "The Messenger": [5, 4, 2, 5, 4, 1, 1, 2],
  "Socialise": [2, 1, 2, 2, 1, 2, 4, 2]
]
//先求平均数
var averageRatings: [String: Double] = [:]
appRatings.forEach {
  let total = $0.value.reduce(0, +) // + is a function too!
  averageRatings[$0.key] = Double(total) / Double($0.value.count)
}
averageRatings
//过滤、输出
let goodApps = averageRatings.filter {
  $0.value > 3
}.map {
  $0.key
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容