2019独角兽企业重金招聘Python工程师标准>>>

AFNetworking

ATS 设置

<key>NSAppTransportSecurity</key><dict><!--Include to allow all connections (DANGER)--><key>NSAllowsArbitraryLoads</key><true/></dict>

封装网络框架的必要性

  • 在应用程序开发中,一定要封装隔离网络框架

  • 示意图如下:

OC 封装网络工具

  • 新建网络工具类 NetworkTools

  • 实现单例

+ (instancetype)sharedTools {    static NetworkTools *instance;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{instance = [[NetworkTools alloc] initWithBaseURL:nil];instance.responseSerializer.acceptableContentTypes = [instance.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];});    return instance;
}
  • 建立网络请求方法

- (void)request:(NSString *)URLString parameters:(id)parameters finished:(void (^)(id result, NSError *error))finished {NSAssert(finished != nil, @"必须输入完成回调");[self GET:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {finished(responseObject, nil);} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {finished(nil, error);}];
}
  • 测试网络请求

[[NetworkTools sharedTools] request:@"http://www.weather.com.cn/data/sk/101010100.html" parameters:nil finished:^(id result, NSError *error) {    NSLog(@"%@ %@", result, error);
}];
  • 定义 HTTP 请求枚举类型

/// HTTP 请求方法枚举typedef enum : NSUInteger {    GET,    POST,
} HTTPRequestMethod;
  • 从 AFHTTPSessionManager.m 中复制 dataTaskWithHTTPMethod 函数定义

@protocol NetworkToolsProxy <NSObject>@optional- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)methodURLString:(NSString *)URLStringparameters:(id)parameterssuccess:(void (^)(NSURLSessionDataTask *, id))successfailure:(void (^)(NSURLSessionDataTask *, NSError *))failure;@end
  • 修改 request 方法

- (void)request:(HTTPRequestMethod)method URLString:(NSString *)URLString parameters:(id)parameters finished:(void (^)(id result, NSError *error))finished {NSAssert(finished != nil, @"必须输入完成回调");    NSString *methodName = (method == GET) ? @"GET" : @"POST";[[self dataTaskWithHTTPMethod:methodName URLString:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {finished(responseObject, nil);} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {finished(nil, error);}] resume];
}
  • 测试 GET 请求

[[NetworkTools sharedTools] request:GET URLString:@"http://www.weather.com.cn/data/sk/101010100.html" parameters:nil finished:^(id result, NSError *error) {    NSLog(@"%@ %@", result, error);
}];
  • 测试 POST 请求

[[NetworkTools sharedTools] request:POST URLString:@"http://httpbin.org/post" parameters:@{@"name": @"zhangsan", @"age": @18} finished:^(id result, NSError *error) {    NSLog(@"%@ %@", result, error);
}];

Swift 封装网络工具

enum HTTPRequestMethod: String {    case GET = "GET"case POST = "POST"}class NetworkTools: AFHTTPSessionManager {    // 单例static let sharedTools: NetworkTools = {        let instance = NetworkTools(baseURL: nil)instance.responseSerializer.acceptableContentTypes?.insert("text/html")        return instance}()    // 网络请求方法func request(method: HTTPRequestMethod, URLString: String, parameters: AnyObject?, finished: (result: AnyObject?, error: NSError?)->()) {        let success = { (task: NSURLSessionDataTask, result: AnyObject) -> Void infinished(result: result, error: nil)}        let failure = { (task: NSURLSessionDataTask, error: NSError) -> Void inprint(error)finished(result: nil, error: error)}        if method == .GET {            GET(URLString, parameters: parameters, success: success, failure: failure)} else {            POST(URLString, parameters: parameters, success: success, failure: failure)}}
}

转载于:https://my.oschina.net/venn0126/blog/541124

OC与Swift封装网络工具类相关推荐

  1. 使用单例模式封装网络工具类(okH)

    我是用的是接口传值,所以第一步是接口的创建 public interface NetWorkModelInterface {//失败void failure(Exception e);//成功void ...

  2. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  3. 基于AFNetworking的封装的工具类

    基于AFNetworking的封装的工具类MXERequestService // // MXERequestService.h // testAFNetWorking // // Created b ...

  4. writeValueAsString封装成工具类

    封装成工具类 [java] view plaincopyprint? <span style="font-family:Microsoft YaHei;">public ...

  5. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. 分页封装实用工具类及其使用方法

    分页封装实用工具类及其使用方法 作者: javaboy2012 Email:yanek@163.com qq:    1046011462 package com.yanek.util; import ...

  7. Redis(七) - 封装Redis工具类

    文章目录 一.封装Redis工具类 1. 使用构造方法注入StringRedisTemplate 2. 方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL ...

  8. Java封装redis工具类RedisUtils,以及在@Postconstruct注解中调用redis可能出现redisTemplate空指针异常

    1.封装redis工具类RedisUtils import org.springframework.data.redis.core.RedisTemplate; import org.springfr ...

  9. SpringBoot整合Redis+mybatis,封装RedisUtils工具类等实战(附源码)

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:陈彦斌 cnblogs.com/chenyanbin/ ...

最新文章

  1. 微信小程序,对象转换成数组
  2. RocketMq是什么
  3. NYOJ 370 波动序列
  4. 研发工作中芯片选型需要考虑的问题
  5. form表单中,file选择图片后预览
  6. LeetCode 814. 二叉树剪枝(递归)
  7. JDBC实现图书管理小案例
  8. 用python代替人脑运算24点游戏
  9. 透明加密tde_如何在SQL Server中监视和管理透明数据加密(TDE)
  10. python解释执行器_有关Python脚本相关说明介绍
  11. C# winfrom 添加Log4Net日志库
  12. 【POJ 3074】Sudoku【剪枝】
  13. 递归神经网络教程请签收!
  14. 科技文献检索(八)——检索技术
  15. Oracle PL/SQL开发基础(第十五弹:同义词)
  16. 丝般顺滑!全新垃圾回收器 ZGC 初体验 | 龙蜥技术
  17. 【WSL2教程】WSL迁移到非系统盘
  18. html5绘制矩形动画,HTML5 Canvas中绘制矩形实例
  19. 【网络】网络基础概念
  20. 10G Ethernet PCS/PMA IP 核

热门文章

  1. 手把手教你学Kotlin (1): JetBrains的Kotlin Educational Tool下载、安装和 Kotlin Koans的安装和使用
  2. 修改Windows的cmd和PowerShell 的字体
  3. xp http文件服务器,在XP sp3下用IIS搭建http服务器总结
  4. mysql a-z排序_mysql实现首字母从A-Z排序
  5. Centos7 Docker Compose部署mysql5.7
  6. 2020-10-18C++笔记之C/C++之字符串赋值
  7. android 输入法 suretype,没输入法的年代,黑莓都有哪些经典键盘?
  8. Spring Context 你真的懂了吗?
  9. Python 超简单3行代码提取音乐高潮部分
  10. mysql update 有中文_MySQL Update语句一个非常经典的“坑”