У меня есть класс Swift Test
со следующим инициализатором.Ошибка с переменным назначением в Swift
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
является постоянно пустой словарь.
Я что-то не хватает?
Когда ваше завершениеHandler называется async, 'self' все еще существует? Кроме того, где вы проверили свой автоответ., Так как completeHandler автоматически 'escaping' – antonio081014
Ваша функция y не ждет завершения обработчика завершения. Он возвращается немедленно, и поэтому Test.init() завершается до того, как будет установлено self.response. Вы также должны передать слабую ссылку на себя в обработчик завершения. – onnoweb
@onnoweb Если я изменяю 'completeHandler: {() в' to 'completeHandler: {[weak self]() in' и' self.response = z' для 'self? .Response = z',' self.response' все еще пуст. – Angelo