Swift Alamofire for loop返回操场中的空阵列
我已经找了一个小时了,但我似乎还没弄明白。我认输了,然后问你 我有下面的游戏脚本,它打印一个空数组 我想在调用函数时返回一个自定义对象数组。我读到阿拉莫菲尔是一个不和谐的城市,但我真的不知道在这一点上该怎么做 提前谢谢Swift Alamofire for loop返回操场中的空阵列,swift,alamofire,Swift,Alamofire,我已经找了一个小时了,但我似乎还没弄明白。我认输了,然后问你 我有下面的游戏脚本,它打印一个空数组 我想在调用函数时返回一个自定义对象数组。我读到阿拉莫菲尔是一个不和谐的城市,但我真的不知道在这一点上该怎么做 提前谢谢 //: Playground - noun: a place where people can play import UIKit import Alamofire import SWXMLHash import PlaygroundSupport import Foundat
//: Playground - noun: a place where people can play
import UIKit
import Alamofire
import SWXMLHash
import PlaygroundSupport
import Foundation
PlaygroundPage.current.needsIndefiniteExecution = true
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
class Tram {
var arrivalInMinutes: Int?
var tramDestinationEnglish: String?
init(destination: String, arrivalTime: Int) {
tramDestinationEnglish = destination
arrivalInMinutes = arrivalTime
}
}
func retrieveListOfTrams() -> [Tram] {
var anyArray = [Tram]()
Alamofire.request("https://hktramways.com/nextTram/geteat.php?stop_code=08W")
.response { (response) in
let xmlData = SWXMLHash.parse(response.data!)
for elem in xmlData["root"]["metadata"].all {
let tramArrival = elem.element!.attribute(by: "arrive_in_minute")!.text
let tramDestination = elem.element!.attribute(by: "tram_dest_en")!.text
anyArray.append(Tram(destination: tramDestination, arrivalTime: Int(tramArrival)!))
}
}
return anyArray
}
print(retrieveListOfTrams())
问题是,您在请求返回结果之前返回数组,因为读取Alamofire时有一个异步行为。解决此问题的一种方法是使用一个只在结果到达后返回数组的完成块:
func retrieveListOfTrams(completion: @escaping ([Tram]) -> Void) {
var anyArray = [Tram]()
Alamofire.request("https://hktramways.com/nextTram/geteat.php?stop_code=08W")
.response { (response) in
let xmlData = SWXMLHash.parse(response.data!)
for elem in xmlData["root"]["metadata"].all {
let tramArrival = elem.element!.attribute(by: "arrive_in_minute")!.text
let tramDestination = elem.element!.attribute(by: "tram_dest_en")!.text
anyArray.append(Tram(destination: tramDestination, arrivalTime: Int(tramArrival)!))
}
completion(anyArray)
}
}
然后可以调用该函数:
retrieveListOfTrams(completion: { anyArray in
print(anyArray.description)
})
谢谢-但现在我遇到了:Playerd执行失败:错误:Playerd。Playerd:36:13:错误:使用非转义参数“completion”的闭包可能允许它转义completionanyArray^Playerd。Playerd:19:26:注:参数“completion”是隐式非转义函数retrieveListOfTramscompletion:[Tram]>Void{^@escapingI找到了答案:func retrieveListOfTramscompletion:@escaping[Tram]>Void