美文网首页
swift中的defer使用场景

swift中的defer使用场景

作者: 梁森的简书 | 来源:发表于2021-09-15 15:25 被阅读0次

延迟

个人理解类似闭包,会延迟执行,但只要执行了defer定义的代码就一定会执行。

执行顺序

defer的位置越靠前,执行顺序越在后,我们可以在最开始就写上defer保证它最后被执行。

场景

  1. 网络数据回调
    看代码:
func storeList(lon: String, lat: String, storeIds: [Int]?, finishCallBack: @escaping XVDataErrorCallBack) {
        XVGoodsRequest.storeList(lon: lon, lat: lat, storeIds: storeIds).send(mapObjectType: XVStoreData.self) { result in
            switch result {
            case .success(let result):
                guard let model = result.model as? XVStoreData else {
                    HYToast.showText("数据结构不匹配")
                    finishCallBack(nil, nil)
                    return
                }
                self.storeData = model
                finishCallBack(model, nil)
            case .failure(let error):
                finishCallBack(nil, error)
            }
        }
    }

回调一定要有(finishCallback),但因为有错误和成功的情况,且可能有多种错误,所以会写多次回调,我们可以使用defer保证回调一定会有,且只写一次
修改后代码:

func storeList(lon: String, lat: String, storeIds: [Int]?, finishCallBack: @escaping XVDataErrorCallBack) {
        XVGoodsRequest.storeList(lon: lon, lat: lat, storeIds: storeIds).send(mapObjectType: XVStoreData.self) { result in
            var reError: XVRequestError? = nil
            var reModel: Any? = nil
            defer {
                finishCallBack(reModel, reError)
            }
            switch result {
            case .success(let result):
                guard let model = result.model as? XVStoreData else {
                    HYToast.showText("数据结构不匹配")
                    reError = XVRequestError.other(1, nil, "数据结构不匹配")
                    return
                }
                self.storeData = model
                reModel = model
            case .failure(let error):
                reError = error
            }
        }
    }

相关文章

  • Swift 中 defer 的介绍与使用场景

    Swift 中 defer 的介绍与使用场景 用defer语句在即将离开当前代码块时执行一系列语句。该语句让你能执...

  • swift中的defer使用场景

    延迟 个人理解类似闭包,会延迟执行,但只要执行了defer定义的代码就一定会执行。 执行顺序 defer的位置越靠...

  • 读喵神文章有感

    昨天读了喵神的《关于 Swift defer 的正确使用》,对defer有了新的认识。之前在自学swift中也看到...

  • swift defer 关键字

    使用场景?在函数结束之后执行,一般用于资源释放 如何使用? 限制条件 参考:defer-usage-swift

  • swift 的 defer

    这些知识点不用,很容易忘掉。 看这位的吧。swift 的 defer 几个简单的使用场景

  • Swift中defer的使用

    defer:defer中的代码将延迟至当前作用域结束之前执行注意:必须有执行到defer,才会触发defer。如果...

  • Swift中defer的使用

    defer语句在代码块(方法、闭包等,可以理解为大括号括起来的代码)作用域退出之前执行。一个代码块允许有多个def...

  • swift-defer

    来源自喵神的博客:关于 Swift defer 的正确使用 defer简介 从语言设计上来说,defer 的目的就...

  • Swift之Defer

    Swift2.0中加入了defer新语法声明。defer译为延缓、推迟之意。那么在Swift2.0中它将被应用于什...

  • swift 的 defer 几个简单的使用场景

    准备把 swift 文档再扫一遍,发现了defer这个关键字,恕本人愚钝,以前还从来没有用过这个呢~ 简单地列一下...

网友评论

      本文标题:swift中的defer使用场景

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