【发布时间】:2018-02-12 22:07:02
【问题描述】:
问题:我正在尝试访问从completionHandler 返回的值,以将其分配给completionHandler 返回方法范围之外的变量。我可以访问方法范围内的变量,但不能从外部访问。我尝试在访问时将其分配给类变量,但没有奏效。有什么想法吗?
var marketler = [MarketModel]()
var marketAdiArray = [String]()
override func viewDidLoad() {
getMarkets { (marketdizi) in
self.objAryToTableView(markets: marketdizi)
print(self.marketAdiArray) // -> this returns the right array
}
print(self.marketAdiArray) // -> this returns an empty array
}
func getMarkets(completionHandler : @escaping ([MarketModel])->()) {
let uid = "userID(02)"
print("uid : \(uid)")
MobileUserViewModel().getUser(userId: uid, completionHandler: { (user) in
// here returns an user object
self.loginUser = user
MarketViewModel().getMarketFromDb(mobilUser: user, completionHandler: { (marketler) in
print("marketler : \(marketler)")
completionHandler(marketler)
})
})
}
func objAryToTableView(markets : [MarketModel]) {
var ary = [String]()
for m in markets {
ary.append(m.marketName as String!)
}
self.marketAdiArray = ary
}
【问题讨论】:
-
提供给
getMarkets的完成处理程序中的print工作正常,因为它在getMarketFromDb调用成功时被调用。闭包后的print无法按预期工作,因为它是在上一行之后立即调用的,无需等待getMarketFromDb完成。 -
感谢您的回答,有没有办法将值分配给类中的另一个变量?或任何其他建议?
-
作业不是问题。问题是您在变量准备好之前访问它(在异步调用
getMarketFromDb之前)。
标签: ios swift asynchronous swift4 completionhandler