问题:我正在尝试访问从 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
}
最佳答案
block (完成处理程序)内的代码在 getMarketFromDb
调用成功后执行。 block 外的代码紧接在数组中没有任何数据的前一行之后执行。
如果您需要触发从数据 Db 更新数据的 UI 更新,那么您需要从完成 block 内部调用 UI 更新。
getMarkets { (marketdizi) in
self.objAryToTableView(markets: marketdizi)
print(self.marketAdiArray) // -> this returns the right array
self.tableView.reloadData()
}
print(self.marketAdiArray) // -> this returns an empty array
关于ios - Swift 4 访问完成处理程序从类变量返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48756309/