Lua编写iOS程序
2012-10-08 13:42:08 来源:WEB开发网print('resultis ' .. tostring(result))
if not successthen
self.output:setText('Error: ' .. tostring(result))
else
self.output:setText(tostring(result))
end
end
waxClass函数实际定义了一个新的OC类。本例中我们定义了一个名为RootViewController的类派生自UIViewController。(在Wax中,该OC类被放在了UI.ViewController命名空间中,而不是UIViewController)。
这个类的Lua类型是table(其实是userdata,但你可以看成是table),因此self.input是Lua表字段而不是OC属性。访问属性你必需用setter/getter方法,例如self.output:setText()。我就是在这一点上被误导了,直到某天我在这个mail list中问到这个问题才恍然大悟,从此再也不会搞混了(这个maillist上的人们都非常友好)。
Wax类也可以实现协议。例如,在这个示例Stats中,演示了用两个定制的UITableviewController类处理UITableView。这个两个类都实现了UITableViewDelegate和UITableViewDataSource协议。列表7展现了一个类,实现了分组表视图的UITableViewDataSource协议。
列表 7: SortedDataSource.lua
waxClass{'SortedDataSource', NS.Object, protocols ={'UITableViewDataSource'}, }
function init(self, source_table)
self.source_table = source_table
return self
end
function numberOfSectionsInTableView(self, tableView)
return#self.source_table.headers
end
function tableView_numberOfRowsInSection(self, tableView, section)
local index =self.source_table.headers[section+1]
return#self.source_table[index]
end
function tableView_cellForRowAtIndexPath(self, tableView,indexPath)
localidentifier = 'TableViewCell'
local cell = tableView:dequeueReusableCellWithIdentifier(identifier)
cell = cell orUI.TableViewCell:initWithStyle_reuseIdentifier(UITableViewCellStyleDefault,
identifier)
local key =self.source_table.headers[indexPath:section()+1]
localcomponent = self.source_table[key]
local player =component[indexPath:row()+1]
cell:setText(player[1] .. ' ' .. player[2] .. ' ' .. player[3])
return cell
end
function tableView_titleForHeaderInSection(self, tableView, section)
returnself.source_table.headers[section+1]
end
注意在tableView_titleForHeaderInSection函数中,Lua字符串和OC字符串是自动转换的。
Wax使用的统一命名方案允许你很容易猜到在Lua中访问OC方法的函数名称。Wax使用TextMate来操作OC调用。例如,你可以直接从Xcode文档粘贴方法签名并转换为Lua调用(我正在犹豫是写一个Emacs函数来干这件事情,还是打开Textmate,然后自己去喝一罐Kool-aid。)
Wax还有许多好东西比如访问SQLite、简单的HTTP请求、XML和JSON处理、CG动画、渐变。另外最近还增加了用Lua编写应用程序委托(不需要在启动Wax时再用OC来实现),从命令行运行测试。最有趣和给力的消息是,Wax现在提供了一个交互式控制台,你可以telnet到模拟器(或者设备上!)与运行的程序进行交互:调整参数或查看运行状态。
Wax是开源的,也使用MIT协议。现在,这个项目由众多开发者参与和使用。
结束语
应用商店中,用Lua开发的app是被接受的。Ansca论坛罗列的Coronaapp的超过了150个主题(我没有全部看过…它们不全部是新的应用)。看过Wax的邮件列表,你会发现鲜有开发者声明在使用Wax编写app,很可能还有更多的开发者没有附在列表中。还有许多App采用了DIY的方法。
更多精彩
赞助商链接