Swift中的变量赋值失败

时间:2017-02-06 18:27:29

标签: swift

我有一个带有以下初始化程序的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一直是空字典。

我错过了什么吗?

1 个答案:

答案 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
        }
    }
}