我在一个中心点(类)上工作,在那里我的数据被请求和检索。

可以从任何视图调用此类:

override func viewDidLoad() {
    super.viewDidLoad()

    let group = dispatch_group_create()
    var data = RestApiManager(group)
    dispatch_group_notify(group, dispatch_get_main_queue()) {
        return data
    }
}

class RestApiManager {

    let user = "user"
    let password = "password"

    var result: JSON = []

    init(group) {

        dispatch_group_enter(group)
        Alamofire.request(.GET, "http://example.com/api/")
            .authenticate(user: user, password: password)
            .responseJSON { _, _, result in
                switch result {
                case .Success(let data):
                    self.result[] = JSON(data)
                case .Failure(_, let error):
                    print("Request failed with error: \(error)")
                }
                dispatch_group_leave(group)
        }
    }
}


但是在初始化类时它已经失败了。

任何人都可以帮助我设计一种合适的方法吗?

谢谢和问候

最佳答案

import XCPlayground

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

import Foundation

class C {
    var txt: String = "start"
    init(group: dispatch_group_t) {
        dispatch_group_enter(group)
        print(txt)
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { () -> Void in
            usleep(200000)
            self.txt = "end"
            print(self.txt)
            dispatch_group_leave(group)
        }
    }
}

func f() {
    let group = dispatch_group_create()
    let c = C(group: group)
    dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
        print("notify: \(c) created")
    }
}

f()
print("continue running ...")


这对我有效,没有任何麻烦。你写了
“但是在初始化类时它已经失败了。”
到底是什么意思?详细说明您的“失败” ...
顺便说一句,我不明白如何从组通知处理程序中返回数据(返回数据)...(通常是从任何异步代码中返回)

关于swift - swift -大中央 dispatch 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32812086/

10-10 16:48