我的一个视图控制器解码并打印了网页中的html。我已经在stackoverflow和github上的示例项目中进行了搜索,看来人们正在将Alamofire与Swiftsoup结合使用。
我是一个初学者,但是我想了解为什么当我只能使用URLSessions时为什么需要AlamoFire?使用Alamofire更好吗?
我认为我的用例很简单。如果我使用Alamofire,
let getURL = "https://www.someurl.com/extension"
Alamofire.request(getURL, method: .post, parameters: nil, encoding: URLEncoding.default).validate(contentType: ["application/x-www-form-urlencoded"]).response { (response) in
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
do {
parseHTML()
}
}
}
如果我使用URLSessions,我想它应该是这样的:
let httpURL = URL(string: "https://www.someurl.com/extension")!
let httpTask = URLSession.shared.dataTask(with: httpURL) {
(data, response, error) in
guard let validData = data, error == nil else {
DispatchQueue.main.async(execute: {
print("Error getting paragraph\n") })
return
}
var results = String(data: data!, encoding: String.Encoding.utf8) ?? "Unable to read Paragraph HTML\n"
DispatchQueue.main.async(execute: {
print("Correctly read from Paragraph HTML\n")
parseHTML()
})
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async(execute: {
httpTask.resume()
})
另一个问题:Swiftsoup是解码HTML的理想之选吗?有内置的东西可以代替吗?
答案 0 :(得分:1)
Alamofire / AFNetworking(AFNetworking是Objective-c版本)作为Apple的NSURLConnection类的替代品而受到关注,该类更底层,涉及许多样板代码。建立下载任务或使用NSURLConnection进行任何操作都不那么容易,AFNetworking(当时)使您可以轻松执行任务(如您的问题)而不必编写太多代码。
在iOS7左右,苹果发布了NSURLSession来代替NSURLConnection,这使其与AlamoFire的工作方式非常相似。就个人而言,我觉得使用NSURLSession / URLSession很好也很简单。也许AlamoFire易于使用,但总体来说是相似的。这些天,我最后一次转向AlamoFire的唯一机会就是遇到某种限制。
因此tl;在iOS7之前的版本中,AFNetworking是一种处理下载任务的更简单明了的方法。 iOS7后的URLSession变得更易于使用和设置。