Wax:用Lua開發(fā)原生iPhone App
Wax是什么?
Wax是一個框架,讓你可以用Lua開發(fā)原生的iPhone應(yīng)用。Wax把Lua和Objetive-C的類庫 連接起來,也就是說,你可以用Lua使用任何的Objective-C類及框架。
為什么使用Wax?
- Wax是免費的、開源的。你總是可以改動源代碼,以滿足自己的需要。
- 用Lua這種高效腳本語言編寫代碼可以大大節(jié)省時間
- 可以使用所有現(xiàn)有的Objective-C庫
- 可以讓你的App在線更新一些功能,不再需要經(jīng)過蘋果App Store的審核,不過被蘋果發(fā)現(xiàn)你的應(yīng)用下載代碼的話可能會被拒絕。
2.7 Apps that download code in any way or form will be rejected 2.8 Apps that install or launch other executable code will be rejected
Hello Wax
新建iOS APP項目,使用Empty Application模板,命名為HelloWax
下載wax.framework:https://github.com/downloads/probablycorey/wax/wax.framework.zip
解壓縮wax.framework.zip,將wax.framework添加到項目中,選擇“Copy items into destination group's folder”復選框
AppDelegate.h文件,導入Wax包頭文件:
- # import <wax/wax.h>
AppDelegate.m文件,在application:didFinishLaunchingWithOptions:方法中,[self.windowmakeKeyAndVisible];和return YES;之間,添加代碼:
- wax_start("init.lua", nil);
項目中新建文件init.lua:
- require "ViewController"
- viewController = ViewController:init()
- window = UIApplication:sharedApplication():keyWindow()
- window:setRootViewController(viewController)
項目中新建文件ViewController.lua:
- waxClass{"ViewController", UIViewController}
- function viewDidLoad(self)
- self.super:viewDidLoad(self)
- local label = UILabel:initWithFrame(CGRect(0, 120, 320, 40))
- label:setColor(UIColor:blackColor())
- label:setText("Hello Wax!")
- label:setTextAlignment(UITextAlignmentCenter)
- local font = UIFont:fontWithName_size("Helvetica-Bold",50)
- label:setFont(font)
- self:view():addSubview(label)
- end
運行,搞定,Hello Wax!
關(guān)于Wax的語法
Lua中的函數(shù)名稱不能有冒號。為了補償這個差異,凡是Objective-C中隔開方法名稱的地方,在Lua中都換成下劃線。比如說以上程序的 UIFont:fontWithName_size("Helvetica-Bold",50)對應(yīng)于Objective-C的[UIFont fontWithName:@"Helvetica-Bold" size:50]
Lua沒有像Objective-C那樣的繼承體系。Lua中根本沒有類。
想通過Lua創(chuàng)建一個Objective-C類,就要使用waxClass{“CLASS NAME”, “PARENT_CLASS”}
這個函數(shù)。你添加到該Lua文件的所有之后的函數(shù)(在同一個文件里面)都會作為實例方法,自動添加到新的類。
- waxClass{"ViewController", UIViewController}
Wax不支持Objective-C屬性。只能使用View:setFrame(someFrame)
,不能使用someView.frame