JSPatch在Swift项目中的使用
来源:互联网 发布:htct328t软件下载 编辑:程序博客网 时间:2024/06/07 20:30
本博客迁移来自:http://www.jianshu.com/users/465865c268ed/latest_articles
现在的这个项目从1月份开始做,到现在也快一年了,听起来感觉项目很大似得,其实只是效率慢的缘故(后台慢,需求慢…,种种我就不吐槽了)。
大概从7月份开始,项目中新的需求我尝试着用Swift去写,由此开始,项目变成了OC和Swift的混编项目了(安装包足足大了好几倍)。从两个文件变成一个文件,倒也清爽了许多,瞬间找回了当年写JAVA的感觉(两年前写了半年的JAVA EE之后转投进了iOS的大坑中)。
说说感受,一个桥接文件搞定了OC和Swift的引用,却也没显得有多复杂,不过最蛋疼的当属使用CocoaPods了,在混编中可能会出现有些Swift第三方库使用不了报错的现象,搞了了好久也没有解决,最后终级办法就是直接拖进项目中(比如snpKit,R.Swift…….)
接下来回到正题,在混编之前,出现bug也用JSPatch修复,混编之后一直没有尝试用JSPatch去修复Swift的bug,看了看文档大概知道在Swift中使用Method Swizzling有这么几点需要注意:(这是引用别人的话)
1: 继承自NSObject的Swift类,其继承自父类的方法具有动态性,其他自定义方法、属性需要加dynamic修饰才可以获得动态性。
2: 若方法的参数、属性类型为Swift特有、无法映射到Objective-C的类型(如Character、Tuple),则此方法、属性无法添加dynamic修饰(会编译错误)。
3:纯Swift类没有动态性,但在方法、属性前添加dynamic修饰可以获得动态性。
今天发现发现存在bug,决定试试
Swift存在bug的代码如下:
dynamic var model : WGPandianListModel = WGPandianListModel(){ willSet{ } didSet{ let state : Int = Int(model.checkFlag as String)!; self.storeName.text = model.storeName as String; stateControlWith(state); } }
由于手贱把状态判断错了,所以需要使用JSPatch重写model的setModel方法,修改掉bug。
之前在OC中是针对出错的地方所在的类用defineClass(‘XXXX’, {})重写或新建就行,但在Swift中的区别是类名之前要加上项目名称(如我的项目名称是Demo,类名是XXX, 则使用
defineClass('Demo.XXX', {})
)
所以重写set方法如下:
require('WGPandianListModel');require('WGNoPandianStoreListCellView');require('NSMutableDictionary');require('YingXiaoGuanJia');require('UITableViewCell');require('UILabel');require('UIFont');defineClass('YingXiaoGuanJia.WGNotPandianStoreListCellView', { setModel:function(model){ self.ORIGsetModel(model); var flag = model.checkFlag().integerValue(); console.log(flag); self.storeName().setText(model.storeName()); self.state().setFont(UIFont.systemFontOfSize(14)); if (flag == 1) { self.state().setText("未盘点"); } else if (flag == 2) { self.state().setText("已盘点"); } else if (flag == 3) { self.state().setText("生效"); } else { console.log("test,不可盘点"); self.state().setText("不可盘点"); } }}, {});
然后扔进服务器中去完美解决。
由于没有认真读文档,一直写成defineClass(’XXX’,{})发现没效果,之后才猛然发现是写错了。恩,希望各位读者细心。
本文demo请访问:https://github.com/voidxin/WGPandianSwift_JSPatchFile
ps:更多在Swift中使用JSPatch的讲解和demo可以看看这位大神的github:https://github.com/adler0518/JSPatchSwiftSample
谢谢。
- JSPatch在Swift项目中的使用
- MBProgressHUD在oc、swift项目中的封装使用
- SQLite在swift中的使用
- Swift在实际项目中的应用
- JSPatch在MAC下的使用
- JSPatch使用
- JSPatch使用
- 如何在 Swift 项目中使用 CocoaPods
- 在swift 项目中使用objective-c
- UITextView在Swift中的使用,自适应
- @objc在swift语法中的使用场景
- Swift泛型在协议中的使用
- 在Swift项目中使用OC,在OC项目中使用Swift
- 在Swift项目中使用OC,在OC项目中使用Swift
- 项目使用jspatch在线修复的一些心得
- ANT 在项目中的使用
- lucene 在项目中的使用
- ldap在项目中的使用
- 无法解析的外部符号 __imp_vfprintf II
- EDM内容灵感枯竭?试试扒扒这5个坑
- native给weex页面传值以及Weex调用native方法(iOS端)
- Java连接elasticsearch
- iOS中H5向native传值或从H5跳转到native
- JSPatch在Swift项目中的使用
- 20161215C语言基础14_函数
- 任务栏出现两列点状
- webpack教程
- ORM——基本思想
- MyBatis中xml文件中模糊查询的写法
- SVN更新的时候前面的U与G是什么意思?
- js apply和js call方法详解
- 如何抑制索引的使用