Swift 基础笔记 - 闭包

闭包

  • 闭包类似于 OC 中的 Block,是一段预先定义好的代码,在需要时执行

定义

  • 体验UIView动画闭包
//: () -> Void 表示一个 `不需要参数,返回值为空` 的闭包类型
UIView.animateWithDuration(0) { () -> Void in
//
}
  • 闭包表达式格式:
  { (形参名称1: 形参类型1, 形参名称2: 形参类型2, ...) -> 返回值 `in`
          //要执行的代码
  }

in 用于区分闭包定义和代码实现

  • 定义闭包
// 定义闭包
var closure = { (text: String) -> Void in
}
  • 调用闭包
// 调用闭包
closure("学习闭包")

闭包使用场景(回调)

  • 模拟耗时操作
  // 闭包的使用场景: 回调
  // 在子线程执行完任务后通知调用者
  func loadData(finished: (result: String) -> Void) {
      dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
          print("拼命加载数据: \(NSThread.currentThread())")

          dispatch_async(dispatch_get_main_queue(), { () -> Void in
              print(": \(NSThread.currentThread())")
              // 通知调用者
              finished(result: "获取到20条数据")
          })
      }
  }
  • 调用
loadData { (result) -> Void in
  print("网络请求完成: \(result)")
}

闭包的简写

// 当闭包的参数和返回都为空时可以省略 () -> Void in
UIView.animateWithDuration(1) {
}

// 闭包是最后一个参数,可以把闭包放在()后面,尾随闭包
UIView.animateWithDuration(1) { () -> Void in
}

你可能感兴趣的:(Swift 基础笔记 - 闭包)