swift 中的 Grand Central Dispatch (GCD)

Grand Central Dispatch (GCD) in swift

我熟悉在 Android 中使用 AsyncTask:创建子类,在子类的实例上调用 execute 并在 UI 线程或主线程上调用 onPostExecute。 swift 中的等价物是什么??

这解决了我在 Swift 中的大部分异步需求:

public func background(function: @escaping () -> Void) {
    DispatchQueue.global().async(execute: function)
}

public func main(function: @escaping () -> Void) {
    DispatchQueue.main.async(execute: function)
}

然后像这样使用:

background {
    // I'm in the background
    main {
        // I'm back on Main
    }
}

例如:

background { [weak self] in
    let result = longOperationToFetchData()
    main {
        self?.data = result.data
        self?.reloadTableView()
    }
}

我认为使用NSOperationQueue 更优雅和简单。您创建了一个队列:

var queue = NSOperationQueue()

并创建任务:

let operation = NSBlockOperation { () -> Void in
// Perform your task
}

之后,将您的任务放入队列

queue.addOperation(operation)

也就是说。如果您想执行 UI-related 任务,请使用此代码块:

NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
// UI related task
}

NSOperationQueue 为您提供了设置任务之间依赖关系的简单方法。例如,您有 4 个任务,op1、op2、op3、op4。而你希望op1需要在op2之前完成,那么你可以这样写:

op2.addDependency(op1)

然后 op2 将在 op1 完成后被触发。由于 op3 和 op4 没有依赖关系,因此可以在 op2

之后完成 before/or