【问题标题】:dispatch_group_notify has been replaced by instance method DispatchGroup.notify(qos:flags:queue:execute:)dispatch_group_notify 已被实例方法 DispatchGroup.notify(qos:flags:queue:execute:) 取代
【发布时间】:2016-11-15 18:56:29
【问题描述】:

我正在尝试将我的 swift2.2 代码库迁移到 swift3。之前,对于GCD,这段代码曾经对我有用。但它显示错误dispatch_group_notify has been replaced by instance method DispatchGroup.notify(qos:flags:queue:execute:) 我该如何解决这个错误?

   dispatch_group_notify(group, dispatch_get_main_queue()) {
        if productsError != nil || citiesError != nil || usersError != nil {
            completionHandler(false)
        } else {
            completionHandler(true)
        }
    }

这是我正在编写的新代码,我在离开小组时被卡住了。

class APIHandler {

func requestDataFromTheServerWithCompletionhandler(completionHandler: ((Bool) -> Void)) {

    let group = DispatchGroup()
    var productsError: NSError?
    var citiesError: NSError?
    var usersError: NSError?
    var categoriesError: NSError?

    let manager = SessionManager()

    // MARK:- Products
    group.enter()
    let productsParser = ProductsParser()
    let productsURL = URLs.productsURL

    manager.requestDataWithCompetionHandler(urlString: productsURL) {( responseData, error) in
        if responseData != nil {
            print("Products Success")
            productsParser.parseAndStoreProductsData(dataToParse: responseData!)
        }
        else {
            print("Products Error")
            productsError = error
        }
        group.leave()
    }

    dispatch_group_notify(group, DispatchQueue.main) {
        if productsError != nil || citiesError != nil || usersError != nil {
            completionHandler(false)
        } else {
            completionHandler(true)
        }
      }
    }
}

【问题讨论】:

    标签: ios swift swift3 ios10 grand-central-dispatch


    【解决方案1】:

    我认为你已经将新旧结合在一起了......

    dispatch_group_notify 是旧代码。

    尝试如下:

    DispatchGroup().notify(queue: DispatchQueue.main) { 
    
    }
    

    通过变量你也可以像 as 一样使用:

    let dispatchGroup = DispatchGroup()
    dispatchGroup.notify(queue: DispatchQueue.main) {
    
    }
    

    而且编译器显示你可以使用如下:

    dispatchGroup.notify(qos: DispatchQoS.background, flags: DispatchWorkItemFlags.assignCurrentContext, queue: DispatchQueue.main) { 
    
    }       
    

    希望对你有帮助。

    【讨论】:

    • 我试图解释我的问题,显示我遇到的代码转换问题。谢谢你的回答,关注你的博客很久了。干杯!
    猜你喜欢
    • 2019-01-08
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2017-09-12
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多