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
















 
 
 


 
 
 
 