我有一个带有以下初始化程序的Swift类Test
。
import Foundation
class Test {
var x: Int
var response: [String: AnyObject]
init(_ x: Int) {
self.x = x
self.response = [String: AnyObject]()
self.y(x)
}
}
在Test
内,我也有以下方法。
func y(_ x: Int) {
// This is a task with a completion handler of type (_, _, _) -> Void
let ... = ...(with: ..., completionHandler: { () in
do {
// The type of z is [String: AnyObject]
let z = ...
self.response = z
} catch {
return
}
})
调用y
应该z
重新分配给self.response
,但self.response
一直是空字典。
我错过了什么吗?
答案 0 :(得分:0)
虽然这种方式似乎是你可能想要重新考虑的事情(我将在一个类似的问题上指出你这个很好的答案:https://stackoverflow.com/a/12797624/2617369),我会用添加一个组合的方式来做完成您的y
方法并使用这样的调度组:
(这是快速3,因为我没有以前的版本IDE在2.3中向您展示,但它应该没有太大区别):
class Test {
var x: Int
var response: [String: Any]
init(_ x: Int) {
self.x = x
self.response = [String: Any]()
let group = DispatchGroup()
group.enter()
self.y(x) { (result) in
self.response = result
group.leave()
}
group.wait()
}
func y(_ x: Int, completion:@escaping (([String:Any])->())) {
// This is a task with a completion handler of type (_, _, _) -> Void
let ... = ...(with: ..., completionHandler: { () in
do {
// The type of z is [String: Any]
let z = ...
completion(z);
} catch {
return
}
}
}