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 上已经很完美的声明各种问题的解决办法了 记得去看哦