使用JavaScript編寫iOS應用業務邏輯

JSAUIKitCocoa使你可使用JavaScript編寫對性能要求不高但可能變更性很大的iOS應用的業務邏輯部分,View組件、須要多線程支持的Model等則直接使用原生對象。javascript

編寫方式與React Native類似,但你幾乎無需學習除了JavaScript語法之外的任何新知識,由於你是直接使用UILabel、UIView這些類,或你本身編寫的擴展類,而無需再瞭解一套全新的React框架體系。java

JSAUIKitCocoa推薦使用MyLayout進行佈局,JSAUIKitCocoaDemo也將使用MyLayout進行頁面佈局。固然,你也能夠自由選擇你熟悉的佈局框架。配合JSAUIKitCocoa提供的JSAUIViewController,你能夠像使用WEBView同樣從Server或本地加載顯示內容以及交互邏輯:git

建立JSAUIViewController:github

//得到JSAUIViewController使用的JSA4Cocoa上下文環境
JSA4Cocoa* jsa = [JSAUIViewController sharedJSA];
//啓動JSA4Cocoa引擎,該代碼全局只應調用一次,建議放在AppDelegate中進行初始化
[jsa startEngine];

//建立一個JSAUIViewController
JSAUIViewController *mainVC = [[JSAUIViewController alloc] initWithJSClass:@"app.Main" Arguments:@[]];

這裏建立的JSAUIViewController就是UIViewController的子類,與你一般編寫一個頁面所建立的UIViewController子類是同樣的,惟一區別是,原來你寫在子類中的代碼,如今可使用JavaScript編寫。objective-c

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:構造器方法,可按上述方式進行組件的初始化。固然,你也能夠編寫符合本身習慣的構造器方法。app

JSAUIKitCocoa展現了一種使用JSAppSugar編寫原生應用業務邏輯的方式,你也可使用JSAppSugar創造你本身的混合編程方式。框架

JSAppSugar同時提供可運行在Android的JSA4Java,你也可使用相似的方式編寫Android應用的業務邏輯,若是你同時爲iOS和Android定義了相同的JS對象映射,則你就能夠實現同時運行在多端的JavaScript業務邏輯代碼。函數

關注JSAppSugar瞭解更多

相關文章
相關標籤/搜索