gpt4 book ai didi

ios - Alamofire 的 Swift 完成处理程序似乎没有执行

转载 作者:行者123 更新时间:2023-11-28 16:02:02 28 4
gpt4 key购买 nike

我的程序中的一个类中有以下函数:

    func getXMLForTrips(atStop: String, forRoute: Int, completionHandler: @escaping (String) -> Void) {
let params = [api key, forRoute, atStop]

Alamofire.request(apiURL, parameters: params).responseString { response in
if let xmlData = response.result.value {
completionHandler(xmlData)
} else {
completionHandler("Error")
}
}
}

在类的 init() 中,我尝试这样调用它:

getXMLForTrips(atStop: stop, forRoute: route) { xmlData in
self.XMLString = xmlData
}

这编译没有错误,但是在执行 init() 之后,我的类的 self.XMLString 仍然是 nil(Xcode 调试器和我的程序由于稍后的 nil 值而崩溃)。我看不出为什么这不起作用。谁能看到我错过了什么?

最佳答案

您不应该在类的初始化程序中进行 Internet 调用。在完成 Internet 调用之前,您将到达 init 方法的返回值,这意味着该类可能会使用您尝试设置的变量的 nil 值进行初始化。

您最好有另一个类,例如 API 客户端或数据源或 View Controller ,其中包含这些方法。我不确定您使用 init() 方法调用的类是什么,但可以说它被称为 Trips

class Trips: NSObject {

var xmlString: String

init(withString xml: String) {
xmlString = xml
}

}

然后一个选择是将其他代码放在您引用该对象的任何类中。

我将以 View Controller 为例,因为我真的不知道您在使用什么,因为您只展示了两种方法。

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
//setting some fake variables as an example
let stop = "Stop"
let route = 3

//just going to put that method call here for now
getXMLForTrips(atStop: stop, forRoute: route) { xmlData in
//initialize Trip object with our response string
let trip = Trip(withString: xmlData)
}
}

func getXMLForTrips(atStop: String, forRoute: Int, completionHandler: @escaping (String) -> Void) {
let params = [api key, forRoute, atStop]
Alamofire.request(apiURL, parameters: params).responseString { response in
if let xmlData = response.result.value {
completionHandler(xmlData)
} else {
completionHandler("Error")
}
}
}

}

如果您希望能够在不需要设置 xmlString 变量的情况下初始化类,您仍然可以做同样的事情。

将 Trips 类 init() 方法更改为任何您需要的方法并设置 var xmlString = "" 或将其设为可选:var xmlString:字符串?

在需要初始化的地方初始化类,然后在 getXMLForTrips 完成后,执行 trip.xmlString = xmlData

关于ios - Alamofire 的 Swift 完成处理程序似乎没有执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40879371/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com