我在一个中心点(类)上工作,在那里我的数据被请求和检索。
可以从任何视图调用此类:
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/