如何将 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?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上从 ASIHTTPRequest 转换为 AFNetworking
AFNetworking 2.0 将 NSURLSessionDataTask 转换为 NSURLSessionDownloadTask 不会将所有文件数据写入磁盘
NSDictionary 与 NSArray 正在转换为元素数组,同时使用 AfNetworking 2 将数据发布到 PHP