一、什麼是Wax
Wax是一個用lua語言編寫本地iPhoneapp的框架。它使用OC運行時將OC和Lua進行綁定。通過Wax,你可以用Lua做任何OC可以做到的事情!你還等什麼?趕快開始吧!
二、為什麼用Lua編寫iPhoneapp?
我喜歡寫iPhone app,但僅限於使用動態語言而不是用OC來寫它們。為什麼許多人寧願用Lua+Wax而不是OC?有以下幾個原因:
q垃圾自動回收!alloc、retain和release的日子終於一去不復返了!
q更少的代碼!不再有頭文件,不再有靜態類型、數組和字典語句!Lua使你的代碼行數減少。
q能訪問Cocoa、UITouch、Foundation這些框架,每一樣都不少!Wax會將OC框架自動暴露給Lua,你想要的每個框架仍然是有效的!
qHTTP請求更簡單。與RESTwebservice進行交互從來沒有這麼容易過!
qLua支持閉包,即塊語句!如何使用過它們的人都知道它們是如何的強大。
qLua內置了正則表達式匹配庫。
三、例子
關於Wax app的簡單示例,請看examples文件夾。
如何創建UIView並設為紅色?
--忘掉alloc吧!內存由Wax自動管理
view= UIView:initWithFrame(CGRect(0, 0, 320, 100))
--用冒號向OC對象發送消息
--所有UIView對象的方法都可用這種方法訪問
view:setBackgroundColor(UIColor:redColor())
如何調用多個參數的方法?
--在方法名中加入下劃線連接參數,然後象使用正常的C函數一樣使用
UIApplication:sharedApplication():setStatusBarHidden_animated(true,false)
如何傳遞array/string/dictionary參數?
--Wax自動轉變array/string/dictionary為NSArrayv/NSString/vNSDictionary對象(以及逆轉換)
images= {"myFace.png", "yourFace.png", "theirFace.png"}
imageView= UIImageView:initWithFrame(CGRect(0, 0, 320, 460))imageView:setAnimationImages(images)
如何創建一個UIViewController子類?
--在"MyController.lua" 中創建
--創建一個OC類MyController,繼承自UIViewController
--這其實是一個OC對象,如果有必要的話,你甚至可以在OC代碼中引用它
waxClass{"MyController",UIViewController}
functioninit()
--要調用父類方法,顯式地使用self.super
self.super:initWithNibName_bundle("MyControllerView.xib",nil)
returnself
end
functionviewDidLoad()
--在這裡寫入其它代碼
end
你說HTTP調用會很輕松,我才不信呢…
url= "http://search.twitter.com/trends/current.json"
--異步調用,當收到應答調用回調函數
wax.http.request{url,callback = function(body, response)
--發出NSHTTPURLResponse 請求
puts(response:statusCode())
--由於content-type為json, Wax 會自動解析並將之封裝到Luatable類型
puts(body)
end}
因為Wax會自動將NSString,NSArray,NSDictionary和NSNumber轉換為原生的Lua值,有時候你必需強制轉換回OC對象,例如:
local testString ="Hello lua!"
local bigFont =UIFont:boldSystemFontOfSize(30)
local size =toobjc(testString):sizeWithFont(bigFont)
puts(size)