使用JavaScript編寫iOS應用業務邏輯
JSAUIKitCocoa使你可以使用JavaScript編寫對效能要求不高但可能變動性很大的iOS應用的業務邏輯部分,View元件、需要多執行緒支援的Model等則直接使用原生物件。
編寫方式與React Native相似,但你幾乎無需學習除了JavaScript語法以外的任何新知識,因為你是直接使用UILabel、UIView這些類,或你自己編寫的擴充套件類,而無需再瞭解一套全新的React框架體系。
JSAUIKitCocoa推薦使用MyLayout進行佈局,JSAUIKitCocoaDemo也將使用MyLayout進行頁面佈局。當然,你也可以自由選擇你熟悉的佈局框架。配合JSAUIKitCocoa提供的JSAUIViewController,你可以像使用WEBView一樣從Server或本地載入顯示內容以及互動邏輯:
建立JSAUIViewController:
//獲得JSAUIViewController使用的JSA4Cocoa上下文環境 JSA4Cocoa* jsa = [JSAUIViewController sharedJSA]; //啟動JSA4Cocoa引擎,該程式碼全域性只應呼叫一次,建議放在AppDelegate中進行初始化 [jsa startEngine]; //建立一個JSAUIViewController JSAUIViewController *mainVC = [[JSAUIViewController alloc] initWithJSClass:@"app.Main" Arguments:@[]];
這裡建立的JSAUIViewController就是UIViewController的子類,與你通常編寫一個頁面所建立的UIViewController子類是一樣的,唯一區別是,原來你寫在子類中的程式碼,現在可以使用JavaScript編寫。
app.Main的類定義如下:
//引入JS父類 $import("jsa.cocoa.JSAUIViewController"); $class("app.Main",{ $extends : "jsa.cocoa.JSAUIViewController", //與RN的render函式類似,這裡返回一個組裝好的UIView物件,該view將被賦值到UIViewController.view屬性 getView : function(viewController){ //使用JSA語法糖函式$new建立MyRelativeLayout物件作為根檢視以實現自動佈局 this.view = $new("MyRelativeLayout","initWithJSAParam:",{ subviews:[ { //建立UILabel檢視物件 view:$new("UILabel","initWithJSAParam:",{ textAlignment:"center", text:"HelloWorld", sizeToFit:true, }), topPos :{value : "safeAreaMargin",offset : 20}, centerXPos : 0, } ] }); return this.view; } });
上面的程式碼將在距頂部(從safeAreaMargin算起)20個點,居中的位置,顯示文字:HelloWorld
當然,你也可以像寫原生程式碼一樣先建立類物件,然後再進行屬性設定,但考慮到JS與原生系統之間的函式呼叫時間相對較長,因此建議使用構造器函式一次性賦值,同時JSAUIKitCocoa對一些常用UI元件編寫了initWithJSAParam:構造器方法,可按上述方式進行元件的初始化。當然,你也可以編寫符合自己習慣的構造器方法。
JSAUIKitCocoa展示了一種使用JSAppSugar編寫原生應用業務邏輯的方式,你也可以使用JSAppSugar創造你自己的混合程式設計方式。
JSAppSugar同時提供可執行在Android的JSA4Java,你也可以使用類似的方式編寫Android應用的業務邏輯,如果你同時為iOS和Android定義了相同的JS物件對映,則你就可以實現同時執行在多端的JavaScript業務邏輯程式碼。