alibaba / wax

Wax is a framework that lets you write native iPhone apps in Lua.
http://github.com/probablycorey/wax
MIT License
1.84k stars 280 forks source link

OC 调用 lua class #52

Closed cissusnar closed 5 years ago

cissusnar commented 7 years ago

看了一下example工程,似乎只有 lua call OC的路径,没有OC call lua class的路径,就是类似于:

lua:

waxClass{"TwitterTableViewController", UITableViewController}
...

OC:

UITableViewController * vc = wax_instance_from("TwitterTableViewController");
[self.navigationController pushViewController:vc animated:NO];
y138828 commented 7 years ago

Class cls = objc_getClass("TwitterTableViewController"); id vc = [cls new]; [self.navigationController pushViewController:vc animated:NO];

cissusnar commented 7 years ago

@y138828 我问题的意思是需要作者提供一个友好的接口,至于这种写法大家都会写

dourgulf commented 7 years ago

这个库确实实现了OC访问Lua创建的类的特性,然而,却不实用。因为,OC编译的时候无法得知Lua创建了什么类,有什么方法。OC需要通过字符串来访问Lua的类,通过NSSelectorFromString来访问方法。我能想到的一个可能的用法是,OC先定义了一个protocol,Lua实现创建类实现这个protocal,这样OC那边的编程才能自然的使用。 或者,另外一个场景: 原本OC中定义的一个ViewController,它有一个UITableView的对象,原本ViewController是作为UITableView的代理人的,通过在Lua实现另外一个代理人类,并且通过替换方法,把UITableView的代理人方法替换成新的类对象。