背景:完整的 Swift/iOS 开发/Alamofire 小白。
尝试将现有的 iOS 项目更新到最新的最低支持版本,但我遇到了一些问题,我不确定如何将以下内容更新到 Alamofire 的最新语法:
static func check(urlString: String,
successBlock: SuccessBlock?,
errorHandlerBlock: ErrorHandlerBlock?) -> DataRequest? {
var validURLString = ""
if urlString.isContainsHTTP {
validURLString = urlString
} else {
validURLString.append("http://")
validURLString.append(urlString)
}
guard let url = URL(string: validURLString + APIMethod.check) else {
errorHandlerBlock?(ErrorHandler("We could not complete the request at: \(validURLString)"))
return nil
}
Alamofire.SessionManager.default.delegate.taskWillPerformHTTPRedirection = { session, task, response, request in
return URLRequest(url: url)
}
return Alamofire.request(url,
method: .get,
parameters: nil,
headers: httpHeaders(.get)).responseJSON { (response) in
handle(response,
successBlock: { _ in
successBlock?(validURLString)
},
errorHandlerBlock: { _ in
errorHandlerBlock?(ErrorHandler("URL not supported"))
})
}
}
就上下文而言,之前使用的 Alamofire 版本是 4.7.3,现在更新到 5.8.1。
对于
Alamofire.SessionManager.default.delegate.taskWillPerformHTTPRedirection
,我目前收到以下错误:
Cannot infer type of closure parameter 'request' without a type annotation
Cannot infer type of closure parameter 'response' without a type annotation
Cannot infer type of closure parameter 'session' without a type annotation
Cannot infer type of closure parameter 'task' without a type annotation
Module 'Alamofire' has no member named 'SessionManager'
我想我可以更新到
Alamofire.Session.default.delegate
来解决最后一个错误。但是,taskWillPerformHTTPRedirection
不再是有效会员,我不知道如何更新。
此外,对于
return Alamofire.request
我收到以下错误:
Module 'Alamofire' has no member named 'request'
Cannot infer contextual base in reference to member 'get'
'nil' requires a contextual type
我相信所有三个错误都可以通过将
Alamofire.request
更新为 AF.request
来解决,但想确认功能将保持不变。
Alamofire 5 中这一切都发生了变化,您可能需要查看文档。
SessionManager
现在只是 Session
。
Alamofire.request
不是AF.request
。 Alamofire
从来没有真正做任何事情,现在 AF
是一个真实的实例,重命名是因为 Swift 不喜欢同名的类型和模块。
重定向由符合
RedirectHandler
协议的类型处理。您可以使用 .redirect(using:)
将一项添加到请求中。您还可以在创建 Session
时全局设置一个。但是您在原始代码中的重定向委托中所做的事情不会执行任何操作,重定向会自动遵循。等效项是 .redirect(using: .follow)
。您可以在我们的文档中阅读更多内容。
我还建议您更新所有响应解析以使用
Decodable
类型并使用 .responseDecodable
来解析它们。