dispatch_group_notify已被实例方法DispatchGroup.notify取代(qos:flags:queue:execute :)

ama*_*ain 4 grand-central-dispatch ios swift swift3 ios10

我正在尝试将我的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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我写的新代码,当我离开小组时,我被困住了.

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)
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*kad 11

我认为你既有新旧结合......

在此输入图像描述

dispatch_group_notify 是旧代码.

尝试如下:

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

}
Run Code Online (Sandbox Code Playgroud)

通过变量,您还可以使用如下:

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

}
Run Code Online (Sandbox Code Playgroud)

并且当显示编译器时,您可以使用如下:

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

}       
Run Code Online (Sandbox Code Playgroud)

希望它能帮到你.