Swift defer

Swift 关键字

defer

字面意思是推迟, 那什么时候执行呢? 在函数即将结束(return 之前). 具体的使用场景有

  1. try catch
 func example () {
     defer {
        print("finally")    
      }
      do {
        throw NSError()
        print("error")
        } catch {
          print("handle error")
        }
 }
  1. 清理工作, 回收资源,加锁/解锁 等
func example () {
      let fileDescriptor = open(url.path, 0_EVTONLY)
      defer {
      close(fileDescriptor)       
      }
    // use fileDescriptor
}
func example() {
      let pointer = UnsafeMutablePointer.allocate(capacity: 1)
      defer {
        pointer.deallocate(capacity: 1)
      }
      // use pointer 
}
func example() {
      lock.lock(); defer {   lock.unlock() }
      // 加锁内容
}
  1. completion block
    多分支函数的某个分支需要return,恰巧忘了调** completion block ** 此时可以使用defer
 func example(completion: () -> void) {
  defer {
      comletion()
   }
  
   guard error == nil else { return }
   // handle success
}

4.调super 方法

调super 方法之前需要做一些准备工作,比如UICollectionViewLayoutprpare(forCollectionViewUpdates:) , 那么我们就可以把调用super的部分放到defer里:

func override exmpale() {
        defer  {
        super.example()
        }
        // some preparation before super.example()
}

参考文章

https://www.jianshu.com/p/a71d87d92459

你可能感兴趣的:(Swift defer)