gpt4 book ai didi

swift - Swift 中的变量赋值失败

转载 作者:行者123 更新时间:2023-11-30 12:42:28 25 4
gpt4 key购买 nike

我有一个带有以下初始值设定项的 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 始终是一个空字典。

我错过了什么吗?

最佳答案

虽然这种方式看起来像你可能想要重新考虑的东西(我将向你指出关于类似问题的一个很好的答案: https://stackoverflow.com/a/12797624/2617369 ),但我会通过添加完成的组合来做到这一点你的 y 方法和一个像这样的调度组:

(这是 swift 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
}
}
}

关于swift - Swift 中的变量赋值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42074724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com