你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> JSPatch在Swift項目中的運用

JSPatch在Swift項目中的運用

編輯:IOS開發綜合

本博客遷移來自: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項目中的運用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved