swift - Swift 范围界定问题,在 alamofire 请求函数中添加变量,但变量在函数之外时似乎丢失了
问题描述
当我尝试添加通过调用我的 API 获得的 GeoPoint 时,我可以在 Alamofire.request 中打印它,但它没有任何内容。此外,在函数结束时,没有什么可以返回。第一次打印工作正常,但第二次打印,在函数结束时,它什么也不打印。
//function used to get geopoints info
func loadParkingLotsInfo() -> [[GeoPoint]]?{
var locations: [[GeoPoint]] = []
var location: [GeoPoint] = []
let header: HTTPHeaders = [
"Subscriber-UUID": "jgwqjdgjhqwhqhwjgdhqwdhqwd",
"Trx-ID": "651426512"
]
Alamofire.request(ip + "/api/zones/all", method: .get, headers: header).responseJSON{
(DataResponse) in
if let data = DataResponse.data{
do {
let json = try JSON(data: data)
for (_, subjson) in json["data"]{
location = []
for (_, geoinfo) in subjson["geopoints"]{
let latitude = geoinfo["latitude"].doubleValue
let longitude = geoinfo["longitude"].doubleValue
let id = geoinfo["id"].intValue
let geoPoint = GeoPoint(id: id, latitude: latitude, longitude: longitude)
location.append(geoPoint)
}
locations.append(location)
for loc in locations{
for point in loc{
print(point.id)
}
}
}
}catch{
}
}
}
for loc in locations{
for point in loc{
print(point.id)
}
}
return locations
}
解决方案
您应该将完成处理程序作为参数传递,如下所示:
func loadParkingLotsInfo(completion:@escaping (_ locations: [[GeoPoint]]) -> Void) {
var locations: [[GeoPoint]] = []
var location: [GeoPoint] = []
let header: HTTPHeaders = [
"Subscriber-UUID": "jgwqjdgjhqwhqhwjgdhqwdhqwd",
"Trx-ID": "651426512"
]
Alamofire.request(ip + "/api/zones/all", method: .get, headers: header).responseJSON{
(DataResponse) in
if let data = DataResponse.data{
do {
let json = try JSON(data: data)
for (_, subjson) in json["data"]{
location = []
for (_, geoinfo) in subjson["geopoints"]{
let latitude = geoinfo["latitude"].doubleValue
let longitude = geoinfo["longitude"].doubleValue
let id = geoinfo["id"].intValue
let geoPoint = GeoPoint(id: id, latitude: latitude, longitude: longitude)
location.append(geoPoint)
}
locations.append(location)
for loc in locations{
for point in loc{
print(point.id)
}
}
completion(locations)
}
}catch{
}
}
}
推荐阅读
- architecture - Bot Framework Emulator 是否使用 Direct-Line-API 通过 Bot 连接器进行通信?
- php - 在给定日期时获取工作周的第一天和最后一天
- javascript - 通过键盘事件编写控件
- javascript - 未捕获的 TypeError:Module.cwrap 不是函数
- python - PyCharm 注释打印行
- properties - 如何在 Autodesk Forge 查看器的左上角定位属性面板?
- google-cloud-firestore - Firestore:按子集合字段排序
- php - 如何使这个 php cURL 执行得更好?
- json - 如何处理复杂的 API 响应以在 Flutter 中制作卡片?
- python - 运行代码以从 github 获取文件时出现 HTTP 错误