WEB开发网
开发学院手机开发iPhone 开发 Lua编写iOS程序 阅读

Lua编写iOS程序

 2012-10-08 13:42:08 来源:WEB开发网   
核心提示:local success,result = pcall(code)print('resultis ' .. tostring(result))if not successthenself.output:setText('Error: ' .. tostring(result))else
local success,result = pcall(code)

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的方法。

上一页  1 2 3 4 5 6  下一页

Tags:Lua 编写 iOS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接