【问题标题】:How to convert a AFNetworking code to Alamofire?如何将 AFNetworking 代码转换为 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
  • 请检查我的回答我已经为同一个创建了帮助类

标签: ios objective-c alamofire afnetworking


【解决方案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,与我展示的示例相同

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 2022-12-30
      • 2020-11-04
      • 2021-10-22
      • 2019-11-19
      相关资源
      最近更新 更多