Wax框架简明教程(1) 简介
一、什么是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)
补充:移动开发 , IOS ,