Alamofire 4->5 任务将执行HTTP重定向升级

问题描述 投票:0回答:1

背景:完整的 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
来解决,但想确认功能将保持不变。

ios swift alamofire
1个回答
0
投票

Alamofire 5 中这一切都发生了变化,您可能需要查看文档。

SessionManager
现在只是
Session

Alamofire.request
不是
AF.request
Alamofire
从来没有真正做任何事情,现在
AF
是一个真实的实例,重命名是因为 Swift 不喜欢同名的类型和模块。

重定向由符合

RedirectHandler
协议的类型处理。您可以使用
.redirect(using:)
将一项添加到请求中。您还可以在创建
Session
时全局设置一个。但是您在原始代码中的重定向委托中所做的事情不会执行任何操作,重定向会自动遵循。等效项是
.redirect(using: .follow)
。您可以在我们的文档中阅读更多内容。

我还建议您更新所有响应解析以使用

Decodable
类型并使用
.responseDecodable
来解析它们。

© www.soinside.com 2019 - 2024. All rights reserved.