必威体育Betway必威体育官网
当前位置:首页 > IT技术

JSPatch 的坑 (后续遇到再补上)

时间:2019-08-20 02:12:14来源:IT技术作者:seo实验室小编阅读:56次「手机版」
 

jspatch

Bang 神的JSPatch  很是牛逼  还记得当初  热更新问题 苹果粑粑的 大清洗嘛.  不过经过实践 ,  目前只要配置公秘钥 还是可以用的

JSPatch  问题 1 :   关于懒加载方法的 覆盖重写 :

代码如下: 

OC - > 

- (SFDynamicMasksegment *)segment{

if (!_segment) {

_segment = [[SFDynamicMaskSegment alloc] initwithItems:@[@"有营业执照", @"无营业执照"] normalcolor:[uicolor whiteColor] highlightColor:kColorGrayBG frame:CGRectMake(12, 0, kScreenWidth - 24, 40)];

_segment.delegate = self;

}

return _segment;

}

JS -> (错误)(说白了 代码转换器直接转的)

require("SFDynamicMaskSegment, UIColor");

defineClass("SFCertificatecontroller", {

segment: function() {

if (!_segment) {

    _segment = SFDynamicMaskSegment.alloc().initWithItems_normalColor_highlightColor_frame([ "有营业执照", "无营业执照" ], UIColor.whiteColor(), kColorGrayBG, CGRectMake(12, 0, kScreenWidth - 24, 40));

    _segment.setDelegate(self);

}

return _segment;

}

}, {});

存在的问题 1 . _segment  懒加载的是私有属性 直接取是获取不到的

2. kColorGrayBG 宏 也是取不到的

3.  CGRectMake 这个方法 JS 也是用不了的需要更改

JS -> (正确)

require("SFDynamicMaskSegment, UIColor, UIColor, UIScreen");

defineClass("SFCertificateController", {

    segment: function() {

    var data = self.valueForKey("_segment")

    console.log("start")

    if (!data) {

    console.log("start if")

    data = SFDynamicMaskSegment.alloc().initWithItems_normalColor_highlightColor_frame([ "有营业执照", "无营业执照" ], UIColor.whiteColor(), UIColor.colorWithHexString("0xe6e6e6"), {x:12, y:0, width:UIScreen.mainScreen().bounds().width - 24, height:40});

    data.setDelegate(self);

    }

    console.log("end")

    self.setValue_forKey(data, "_segment")

    return data;

    }

    }, {});

解决办法   (1 . _segment  懒加载的是私有属性 直接取是获取不到的)

   

私有属性或变量 需要用 ValueForKey 获取 ,并且声明一个变量 取承接   在赋值操作 结束后 重新 setValue 

(2.kColorGrayBG 宏 也是取不到的)

JS 是获取不到OC的宏的  所以招到对应的宏定义 直接取出 对应的值还有方法()

(3.CGRectMake)

结构体也是要改掉哦

其实 Bang神 在git 上已经很完美的声明各种问题的解决办法了  记得去看哦

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读