美文网首页
Swift defer

Swift defer

作者: sankun | 来源:发表于2019-06-17 12:24 被阅读0次

    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<T>.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

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