0
votes

Recently I picked up the book Swift High Performance and tried one of the examples concerned with Apple's Grand Central Dispatch (GCD). I put the following code in a Playground file:

import Foundation
//import XCPlayground
//XCPSetExecutionShouldContinueIndefinitely()

class SalesData {

    var revenue: [Int]
    var average: Int?

    init (revenue: [Int]) {
        self.revenue = revenue
    }

    func calculateAverage() {

        let queue = GCD.backgroundQueue()
        dispatch_async(queue) {

        var sum = 0
        for index in self.revenue.indices {
            sum += self.revenue[index]
        }

        self.average = sum / self.revenue.count
    }
}

Excerpt From: “Swift High Performance.”

However, as can be seen in the attahced sceenshot , XCode tells me that ther is a Use of unresolved identifier GCD. Any idea what I'm missing here?

Thanks!

1
There is no such class called GCD. If you want to get a background queue, you can use this dispatch_get_global_queue(Int(QOS_CLASS_BACKGROUND.rawValue), 0) - Breek
@Breek has your answer. With updates to swift you can now do dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)){ //code to run on background queue } - MikeG

1 Answers

4
votes

In the book, they define a struct called GCD which provides that method. So you have to look in the book to get the rest of the code that you need for the example.

EDIT:

This is the GCD struct that the book provides:

struct GCD {
    static func backgroundQueue() -> dispatch_queue_t {
        return dispatch_get_global_queue (QOS_CLASS_BACKGROUND, 0)
    }
}

It appears on the same page as the example posted in the question.