- 此问题在此处已有答案**:
(13个答案)
昨天关门了。
我试图从一个网站下载一些HTML,解析它,并在网格中显示它。HTML的格式不是很好,所以我已经编写了一个init()方法,将HTML解析为String。
init()在单元测试中运行良好。
我遇到的麻烦是,通过Alamofire把HTML作为一个字符串。我能找到的所有例子似乎都暗示我需要做一些接近这个的事情...
import SwiftUI
import Alamofire
func getHtml()-> String
{
let x = AF.request("https://httpbin.org/get")
.validate()
.response
if let y = x {
debugPrint(y)
return y.something()
}
return "<!-- the html could not be retrieved -->"
}
struct ContentView: View {
var body: some View {
Text(getHtml())
.padding()
}
}
我的挑战是AF. request(). response似乎总是为空。我觉得很奇怪,因为我在网上看到的所有Alamofire示例似乎都没有检查这一点。这就好像Alamofire的旧版本返回了HTTPResponse,而不是HTTPResponse?
有没有一种简单的方法可以检索我正在查看的网站的(非JSON)输出,并将其交给我的构造函数?使用或不使用Alamofire?
谢谢!
如果有问题,这适用于Alamofire 5.6.3
我尝试过的事情:
- 我尝试过使用/不使用validate()
- 在理论上,响应是不同步的,我尝试添加一个braindead while循环:while(响应!=空){休眠(1)}
1条答案
按热度按时间iih3973s1#
在调用异步函数以获取结果之后,不能返回。
你需要
wait
来得到结果,然后使用它们。有很多方法可以做到这一点,包括completion handlers
。你必须查找如何在Swift中使用异步函数。下面的代码显示了Alamofire的另一种替代方法,使用Swift async/await框架从异步函数
getHtml()
获取html
字符串。请注意,您从显示的url中获得了一些JSON数据,如果需要,可以很容易地将其解码为模型。