JSPatch之block

题外话:最近苹果封杀JSPatch以及其他各种Patch的行动一度让很多公司把JSPatch从项目中移除了。眼看Patch时代即将结束,让人一度以为RN和Weex开发者要失业,iOS的又一春又来的时候,一个个谣言被击破,Weex还是可以用,RN也如此,JSPatch SDK1.7 以上版本的 APP 使用自定义 RSA 密钥还是可以上线的。恩,可以继续愉快的Patch。
记录一下。
有个数据请求接口需要传时间,在计算时间的时候出错,导致传过去的时间变成了2017-02-29,汗,二月没有二十九号。所以使得获取不到数据。
这个问题按理说只需使用JSPatch修改计算时间的那个方法即可,但愚蠢的我竟然没有把它单独分装,使得修改一处要改动这个类中的好多东西。汗。。。。
所以只能从数据的下游来处理,数据请求的下游当是封装的AFNetworking的那个类,于是乎决定在网络请求的下游把原始传过来的paremeters修改掉。oc代码如下:

+ (void)loadExaminDataForStoreIdWIthParemeters:(id)parameters success:(void (^)(AFHTTPRequestOperation *operation,id responseObject))success failure:(void (^)(AFHTTPRequestOperation * operation, NSError *error))failure{

    [self GetWithParameters:BaseURL joint:WGLoadExaminDataWithStore_URL WithParameters:parameters success:success failure:failure];
    
}

这里只需要使用JSPatch修改parameters中出错的那个时间就行,然后调用[self GetWithParameters:BaseURL joint:WGLoadExaminDataWithStore_URL WithParameters:parameters success:success failure:failure];就行了。
因为涉及到block的传递,所以这里费了一番小劲。

JSPatch之block_第1张图片
block的使用.png

看文档可知,当要把 JS 函数作为 block 参数给 OC时,需要先使用 block(paramTypes, function) 接口包装,也就是说我这里的success要这样写:block("AFHTTPRequestOperation *,id",success)。
所以以上OC代码转成JS应该这么写:

require("WGCommonFunction, PSBTools,WGYXGJIPA");

defineClass('WGYXGJIPA', {}, {
    loadExaminDataForStoreIdWIthParemeters_success_failure: function(parameters,success, failure) {
//修改传错了的参数
        var startDate = WGCommonFunction.returnLastMonthWithFormat_count("yyyy-MM-dd", -1);
        var endDate = PSBTools.DateTimeWithFormateNowString("yyyy-MM-dd");
        var type = parameters.objectForKey("type");
        var storeId = parameters.objectForKey("storeNo");
        var dic = {
            storeNo: storeId,
            startDate: startDate,
            endDate: endDate,
            type: type
        };
        parameters = dic;
        // 使用block包装
      self.GetWithParameters_joint_WithParameters_success_failure(BaseURL, WGLoadExaminDataWithStore_URL, parameters, block('AFHTTPRequestOperation *,id',success), block('AFHTTPRequestOperation *,NSError *',failure));
    }
});

PS:前天由于JSPatch平台升级,导致旧的SDK1.6.6以下版本下发的Patch不能生效,后来在群里找bang哥,bang哥很快解决了,感谢。

你可能感兴趣的:(JSPatch之block)