如何将 AFNetworking 代码转换为 Alamofire?

Posted

技术标签:

【中文标题】如何将 AFNetworking 代码转换为 Alamofire?【英文标题】:How to convert a AFNetworking code to Alamofire? 【发布时间】:2017-12-29 05:16:13 【问题描述】:

我想将以下代码转换为 Alamofire 版本,但我对 AFHTTPSessionManager 部分感到困惑。

+(void)requestWithUrlString:(NSString *)URLstring method:(NSString *)method parameters:(NSMutableDictionary *)parameters success:(void (^)(id))success faiure:(void (^)(NSError *))failure

    AFHTTPSessionManager *manager = [AFHTTPSessionManager sharedManager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil ];

    manager.requestSerializer.timeoutInterval = 20;

    [manager POST:URLstring parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) 
        if (success) 
            success(responseObject);
        
     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) 
        if (failure) 
            failure(error);
        
    ];

感谢您的帮助。

【问题讨论】:

Alamofire 没有像 AFHTTPSessionManager 这样的东西,它有直接的方法来发送带有所需参数的 post 请求,你可以阅读这个 raywenderlich.com/147086/alamofire-tutorial-getting-started-2 是的,我知道。但我不确定在标题中包含整个acceptableContentTypes(MIME 类型)并用, 分隔它们是否正确。 你可以使用你需要的内容类型,你不需要整个内容类型数组 但是如何设置timeout?在您发给我的教程中,他们似乎使用的是 Apple 的 URLRequest 而不是 Alamofire 请检查我的回答我已经为同一个创建了帮助类 【参考方案1】:

使用这个

Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters as? [String : Any]).responseJSON  response in
                switch response.result
     
case .success :                         
    case .failure :
    

【讨论】:

【参考方案2】:

使用这个类来发送请求

final class ServerManager: SessionManager 

    //----------------------------------------------------------------

   class var sessionConfig : URLSessionConfiguration 
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 60 // seconds
        configuration.timeoutIntervalForResource = 60
        return configuration

    
    class var sessionConfigForDownload : URLSessionConfiguration 
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 20 // seconds
        configuration.timeoutIntervalForResource = 20
        return configuration

    

    static let sharedManager = ServerManager(configuration: sessionConfig, delegate: SessionDelegate.init(), serverTrustPolicyManager: nil)
    static let shareDownloadManager = ServerManager(configuration: sessionConfigForDownload, delegate: SessionDelegate.init(), serverTrustPolicyManager: nil)

    //------------------------------------------------------------

    override init(configuration: URLSessionConfiguration, delegate: SessionDelegate, serverTrustPolicyManager: ServerTrustPolicyManager?) 
        super.init(configuration: configuration, delegate: delegate, serverTrustPolicyManager: serverTrustPolicyManager)
    

    //------------------------------------------------------------




    func postRequestToServer(_ url : String, parameter : Parameters? = nil, encoding : ParameterEncoding = URLEncoding.default, header : HTTPHeaders? = nil , success: @escaping (Any) -> Void, failure: @escaping (Error) -> Void) -> Void 
            self.request(url, method: .post, parameters: parameter, encoding: encoding, headers: header).responseJSON (response) in
                switch response.result 
                case .success:
                    print("Validation Successful")
                    success(response.result.value)
                case .failure(let error):
                    print(error)
                    failure(error)
                
            
        

注意:这只是未使用 XCode 测试的示例。您可以在此处添加您的方法,例如 get、put、patch,与我展示的示例相同

希望对你有帮助

【讨论】:

以上是关于如何将 AFNetworking 代码转换为 Alamofire?的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking:如何发布有序的 JSON

在 iOS 上从 ASIHTTPRequest 转换为 AFNetworking

AFNetworking 2.0 将 NSURLSessionDataTask 转换为 NSURLSessionDownloadTask 不会将所有文件数据写入磁盘

将 curl 命令转换为 AFNetworking 调用

NSDictionary 与 NSArray 正在转换为元素数组,同时使用 AfNetworking 2 将数据发布到 PHP

使用 AFnetworking 保存 mp4