Swift: 用Alamofire做http请求,用ObjectMapper解析JSON

本文介绍了如何在Swift中使用Alamofire进行HTTP请求,并利用ObjectMapper解析JSON。通过实例展示了从发送GET请求到解析JSON数据的全过程,包括Alamofire的使用优势,以及在解析复杂JSON结构时ObjectMapper的模型继承策略。
摘要由CSDN通过智能技术生成
示例代码看最后。

跟不上时代的人突然间走在了时代的前列,果然有别样的风景。首先鄙视一下AFNetworking。这个东西实在太难用了。不想封装都不行,要不写一大堆代码。

NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil 
    progress:nil 
    success:^(NSURLSessionTask *task, id responseObject) { 
        NSLog(@"JSON: %@", responseObject);
    } 
    failure:^(NSURLSessionTask *operation, NSError *error) {  
        NSLog(@"Error: %@", error);
    }
];

Http请求

但是用alamofire就简单的很多了,如:

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) 
    .response { request, response, data, error in
         print(response) 
    }

都是一个GET请求,但是可见的是Alamofire代码量少很多。这也是和AFNetworking3.x比较了,如果你用的是AFNetworking2.x的话代码量的对比更加明显。对于程序员来说调用方法的API简单方便就是用户体验。Developer们也是需要满足UE的需要的。

下面开始进入正题。下面用请求微博的time line来做栗子。

parameters = ["access_token": weiboUserInfo.accessToken ?? "",  "source": ConstantUtil.WEIBO_APPKEY] //1
Alamofire.request(.GET, "https://api.weibo.com/2/statuses/friends_timeline.json" //2
    , parameters: parameters, encoding: .URL, headers: nil)
    .responseString(completionHandler: {response in
        print("response:- \(response)") //3
})

这里用Alamofire请求微博的time line。
1. 请求微博的time line就需要SSO或者网页方式登录微博之后从服务器返回的access_token。另外一个必须的输入参数就是添加微博应用的时候生成的app key。
2. https://api.weibo.com/2/statuses/friends_timeline.json请求的url。
这个url返回的就是你follow的好友的微博。就是你一打开微博客户端看到的那些。
3. 我们知道Alamofire可以把请求返回的数据转化为JSON、String和NSData。如果是作为JSON来处理,也就是使用了responseJSON方法的话,JSON数据会被自动转化为NSDictionary。我们后面需要用到字符串来实现json字符串和Model对象的匹配,所以我们用方法responseString

如果一切设置正确,你会看到这样的结果:

{
    "statuses": [
        {
            "created_at": "Tue May 31 17:46:55 +0800 2011",
            "id": 11488058246,
            "text": "求关注。""source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
            
在使用ARKit (iOS) 开发环境中,如果你需要通过HTTP请求获取JSON数据并将其解析成类实例,通常会涉及到网络请求库(如Alamofire、URLSession等)以及JSON解析库(如SwiftyJSONObjectMapper 或 Codable)。以下是基本步骤: 1. **导入必要的库**: 首先,确保在项目中导入相关的网络请求库和JSON解析库。例如,如果你选择使用Swift标准库中的Codable,你需要导入`Foundation`框架。 ```swift import Foundation ``` 2. **创建HTTP请求**: 使用`URLSession`发起GET或POST请求,并配置相应的URL、头信息和完成处理函数。 ```swift func fetchData(from url: URL, completion: @escaping(Result<Data, Error>) -> Void) { let task = URLSession.shared.dataTask(with: url) { data, response, error in // 处理响应和错误 if let error = error { completion(.failure(error)) } else if let data = data { completion(.success(data)) } } task.resume() } ``` 3. **解析JSON数据**: 使用Codable协议将收到的数据转换为自定义模型类的实例。首先,创建一个模型类,例如`YourDataModel`, 它应该和JSON结构相对应。 ```swift struct YourDataModel: Codable { var property1: String var property2: Int // 其他属性... } let decoder = JSONDecoder() // 解析数据 func parseJson(_ data: Data, completion: @escaping(YourDataModel?, Error?) -> Void) { do { if let decodedData = try decoder.decode(YourDataModel.self, from: data) { completion(decodedData, nil) } else { completion(nil, NSError(domain: "DecodingError", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to decode JSON"])) } } catch { completion(nil, error) } } ``` 4. **整合请求与解析**: 调用`fetchData`方法获取数据后,立即解析它。 ```swift fetchData(from: someUrl) { result in switch result { case .success(let data): parseJson(data) { model, error in if let model = model { // 使用model实例 } if let error = error { print("JSON parsing error: \(error.localizedDescription)") } } case .failure(let error): print("Error fetching data: \(error.localizedDescription)") } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值