iOS 的块操作也可以象Java匿名类一样到处都是

简介: iOS 的块操作也可以象Java匿名类一样到处都是 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

iOS 的块操作也可以象Java匿名类一样到处都是

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。



整理一份之前对 ASIHTTPRequest 的分类封装

今天有点累,突然想到,先留个坑,明天用足足的代码来填满这个坑 ,后续会把以前工作中做的总结,陆续回忆并记录到这里。

预告:

NSData+ASIHTTPRequest

NSDictionary+ASIHTTPRequest

NSObject+ASIHTTPRequest

NSString+ASIHTTPRequest


下面开始填坑,以下仅对 NSObject的分类给予相关代码说明,其它的可以从这个扩展,就自个弄吧。

类声明文件:

//NSObject+ASIHTTPRequest.h
#import <Foundation/Foundation.h>
#import "ASIFormDataRequest.h"

@interface NSObject (ASIHTTPRequest)

- (void)postUrlPath:(NSString *)urlPath body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail;
- (void)getUrlPath:(NSString *)urlPath param:(id)param success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail;
- (void)requestUrlPath:(NSString *)urlPath method:(NSString *)method body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail;

@end

类实现文件:

// NSObject+ASIHTTPRequest.m

#import "NSObject+ASIHTTPRequest.h"

@implementation NSObject (ASIHTTPRequest)


- (void)postUrlPath:(NSString *)urlPath body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail {
    
    [self requestUrlPath:urlPath method:@"POST" body:body success:success fail:fail];
}

- (void)getUrlPath:(NSString *)urlPath param:(id)param success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail {
    
    [self requestUrlPath:urlPath method:@"GET" body:param success:success fail:fail];
}

- (void)requestUrlPath:(NSString *)urlPath method:(NSString *)method body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail {
    
    NSURL *url = [NSURL URLWithString:urlPath];
    __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    __weak ASIFormDataRequest *blockRequest = request;
    
    [request setShouldContinueWhenAppEntersBackground:YES];
    [request setPostValue:[UIDevice currentDevice].model forKey:@"clienttype"];
    [request setRequestMethod:method];
    
    // 如果是 GET 或 POST 方法,并且协议体不为空,则添加参数(以下更适用于 ASIHTTPRequest)
    if (nil != body) {
        
        if ([@"POST" isEqualToString:method]) {
            
            if ([body isKindOfClass:[NSDictionary class]]) {
                
                NSDictionary *bodyDic = (NSDictionary *)body;
                for (NSString *key in bodyDic.allKeys) {
                    
                    id object =[bodyDic objectForKey:key];
                    [request setPostValue:object forKey:key];
                }
            }
            else if ([body isKindOfClass:[NSString class]] || [body isKindOfClass:[NSData class]]) {
                
                NSData *tempData = nil;
                if ([body isKindOfClass:[NSString class]]) {
                    tempData = [body dataUsingEncoding:NSUTF8StringEncoding];
                }
                else {
                    tempData = body;
                }
                [request setPostBody:[NSMutableData dataWithData:tempData]];
                [request setPostLength:[tempData length]];
            }
            
        }
        else if ([@"GET" isEqualToString:method]) {
            
            // 增加 GET 参数
            if ([body isKindOfClass:[NSDictionary class]]) {
                
                NSDictionary *bodyDic = (NSDictionary *)body;
                NSMutableString *paramStr = [[NSMutableString alloc] init];
                for (NSString *key in bodyDic.allKeys) {
                    
                    id object =[bodyDic objectForKey:key];
                    [paramStr appendFormat:@"%@=%@&", key, object];
                }
                NSString *urlWithParam = [urlPath stringByAppendingFormat:@"?%@", paramStr];
                NSLog(@"urlWithParam = %@", urlWithParam);
                request.url = [NSURL URLWithString:urlWithParam];
            }
            else if ([body isKindOfClass:[NSString class]] || [body isKindOfClass:[NSData class]]) {
                
                NSString *paramStr = nil;
                if ([body isKindOfClass:[NSString class]]) {
                    paramStr = (NSString *)body;
                }
                else {
                    paramStr = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
                }
                NSString *urlWithParam = [urlPath stringByAppendingFormat:@"?%@", paramStr];
                NSLog(@"urlWithParam = %@", urlWithParam);
                request.url = [NSURL URLWithString:urlWithParam];
            }
            
            // 清空 POST 包体
            [request setPostBody:nil];
            [request setPostLength:0];
        }
        else {
            
        }
    }
    
    [request setCompletionBlock:^{
        
        success(blockRequest);
    }];
    
    [request setFailedBlock:^{
        fail(blockRequest);
    }];
    
    [request startAsynchronous];
}

@end


目录
相关文章
|
1月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
2月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
3月前
|
存储 Java
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
81 0
|
3月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
56 0
|
2月前
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
37 4
|
2月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
2月前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
2月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
3月前
|
Java
使用kafka-clients操作数据(java)
使用kafka-clients操作数据(java)