zoukankan      html  css  js  c++  java
  • AFN简单封装

    #import <Foundation/Foundation.h>

    #import <AFNetworking/AFNetworking.h>

    /// 网络请求枚举

    typedef enum : NSUInteger {

        GET,

        POST,

    } WZRequestMethod;

    @interface NetworkTools : AFHTTPSessionManager

    + (instancetype)sharedTools;

    - (void)request:(WZRequestMethod)method URLString:(NSString *)URLString parameters:(id)parameters finished:(void (^)(id result, NSError *error))finished;

    @end

     ==========================================

    #import "NetworkTools.h"

    /// 网络工具协议

    @protocol NetworkToolsProxy <NSObject>

    /// 网络请求方法

    ///

    /// @param method     HTTP 请求方法

    /// @param URLString  URLString

    /// @param parameters 参数字典

    /// @param success    成功回调

    /// @param failure    失败回调

    ///

    /// @return NSURLSessionDataTask

    @optional

    - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method

                                           URLString:(NSString *)URLString

                                          parameters:(id)parameters

                                             success:(void (^)(NSURLSessionDataTask *, id))success

                                             failure:(void (^)(NSURLSessionDataTask *, NSError *))failure;

    @end

    /// 遵守网络协议 - 为了能够欺骗 Xcode 给一个智能提示,以及编译通过!

    @interface NetworkTools() <NetworkToolsProxy>

    @end

    @implementation NetworkTools

    + (instancetype)sharedTools {

        static NetworkTools *tools;

        

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            // 注意:末尾需要包含 '/'

            NSURL *baseURL = [NSURL URLWithString:@"http://httpbin.org/"];

            

            tools = [[self alloc] initWithBaseURL:baseURL];

            

            // 设置反序列化格式

            tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];

        });

        

        return tools;

    }

    - (void)request:(WZRequestMethod)method URLString:(NSString *)URLString parameters:(id)parameters finished:(void (^)(id, NSError *))finished {

        

        NSString *methodName = (method == GET) ? @"GET" : @"POST";

        // dataTaskWithHTTPMethod本类没有实现方法,但是父类实现了

        // 在调用方法的时候,如果本类没有提供,直接调用父类的方法,AFN 内部已经实现!

        [[self dataTaskWithHTTPMethod:methodName URLString:URLString parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {

            

            finished(responseObject, nil);

        } failure:^(NSURLSessionDataTask *task, NSError *error) {

            NSLog(@"%@", error);

            finished(nil, error);

        }] resume];

    ================================================

    - (void)demo {

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

            

            if (error != nil) {

                NSLog(@"出错了");

                return;

            }

            

            NSLog(@"%@", result);

        }];

    }

  • 相关阅读:
    4A安全体系
    Linux 安装 Nginx
    Linux 安装 Mysql
    Web容器对比
    Nginx 学习记录
    SO_REUSEADDR选项的平台差异(对于TCP)
    centos下搭建yum服务器
    IOCP 下行为投递的关键点
    网络包解包错误 与 标准io(linux)
    关闭ssh的dns反向解析
  • 原文地址:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/5437163.html
Copyright © 2011-2022 走看看