wax 基础语法

1、wax 中新建对象:

 waxClass{"MyClass", NSObject}
添加协议 
    waxClass{"MyClass", NSObject, protocols = {"UITableViewDelegate", "UITableViewDataSource"}}

2、wax 中方法的参数,第一个默认必须是 self,这样,在该方法中,就可以通过 self 来调用一些东西。

    waxClass{"MyClass", NSObject}
    function storeWords(self, words)
      self.words = words
      self.super:words(self)
    end

3、使用 冒号:代替点.

    UIApplication:sharedApplication() 
    UIApplication.sharedApplication(UIApplication)

比较可以知道,用冒号,更加简洁

4、oc 有多参数的方法中,通过使用 “_” 下划线来代替

OC:
    [UIAlertView initWithTitle:@"title" message:@"message" delegate:nil];

wax:
   UIAlertView:initWithTitle_message_delegate("title", "message", nil)

5、wax 中不使用 oc 中的属性,wax强制要求使用方法来获取或者赋值

   someView.frame -- 不会工作

    -- 使用 setter/getter 来代替
    someView:frame()
    someView:setFrame(someFrame)

6、可以通过 “.” 的操作,来给对象赋值任何的值。

  --  方法通过 : 来获取
    local view = UIView:init()

    view.someRandomVariable = "YEAH!"
    -- 可以赋任何值 并且该值持久存在

7、wax 会强制将 oc 的语法写成 lua 的语法。 即:一个方法的参数是 NSString 类型,那么,在 wax 中,应该传入的参数为 lua 的 string

   local fileManager = NSFileManager:defaultManager()
    local contents = fileManager:directoryContentsAtPath(".")
    -- directoryContentsAtPath 返回一个数组,wax 中编程 table 类型

    print(contents[1]) --> "info.plist"

    -- NSDictionaries 成为 Lua 中的 tables
    -- NSArrays 成为 Lua 中的 tables
    -- NSStrings 成为 Lua 中的 strings
    -- NSNumbers 成为 Lua 中的 numbers

8、如果需要将 wax 类型强制转换成为 oc 类型,可以使用 toobjc 这个方法

   -- 如果尝试去调用 oc 的方法,这将会失败
    local string = "a string"
    string:capitalizedString()
    -- ... 应该这个 string 已经被强制转为 lua 的 string

    --  使用 toobjc  ,string 会被转换为 NSString
    toobjc(string):capitalizedString()

    local length = toobjc(str):length();
    if not toobjc(tempDeviceID):isEqualToString(self:deviceID()) then 
        --xx
    end

9、枚举:

 系统定义的枚举都在 wax/stdlib/enums.lua 这个文件中

10、selector 使用 string 进行传递。

oc 中的写法
@selector(this:is:a:method)
在 lua 中写成
this:is:a:method

11、32/64 可以使用 wax.isArm64 来判断当前 APP 运行的设备是否是64位的 cpu

12、Structs 大部分都定义好了,在 APP_ROOT/wax/wax-scripts/structs.lua 路径下面,不需要重新创建。特别注意 NSInteger 、CGFloat ,它们在32/64位中的设备上,表现不一样。

if wax.isArm64 == true then
    wax.struct.create("CGRect", "dddd", "x", "y", "width", "height")
else
    wax.struct.create("CGRect", "ffff", "x", "y", "width", "height")
end
    -- 创造一个全局的 CGrect 的结构体,里面包含4个参数,第二个参数 “ffff” 标识四个参数的类型

    local rect = CGRect(1, 2, 3, 4)
    print(rect.x) --> 1
    rect.x = 200
    print(rect.x) --> 200

13、 在存在的对象中,hook 其中的一个存在方法,直接写该方法,就会覆盖掉 oc 中已经写好的方法 。 如果你想调用原来的方法 ,你可以在新的方法中,增加 ORIG 的前缀

waxClass{“MyController"}
function viewDidLoad(self)
—做一些事情在原方法之前
     self:ORIGviewDidLoad()--self is no need
--做一些事情在原方法之后
end

14、hook 一个扩展出来的方法,和 hook 一个对象中的方法是类似的

--OC extension
@interface MTPServer (Async4j)
- (void)startAsync4jRequest;
@end

--Lua
waxClass{"MTPServer"}
function startAsync4jRequest(self)
--做一些事情在原方法之前
     self:ORIGstartAsync4jRequest()--self is no need
--做一些事情在原方法之后
end

15、如果 oc 的方法中有 “_”,那么,在 lua 中,使用 “UNDERxLINE”来代替

--OC - (void)_prefixA:(NSString *)a _b:(NSString *)b
function UNDERxLINEprefixA_UNDERxLINEb(self, a, b)
    self:ORIGUNDERxLINEprefixA_UNDERxLINEb(TEST_VALUE_STRING, TEST_VALUE_STRING)
end

--OC - (id)__aa_bb_:(NSString *)v1 _cc__dd_ :(NSString *)v2 ___ee___f___:(NSString *)v3
function UNDERxLINEUNDERxLINEaaUNDERxLINEbbUNDERxLINE_UNDERxLINEccUNDERxLINEUNDERxLINEddUNDERxLINE_UNDERxLINEUNDERxLINEUNDERxLINEeeUNDERxLINEUNDERxLINEUNDERxLINEfUNDERxLINEUNDERxLINEUNDERxLINE(self, v1, v2, v3) 
    return self:ORIGUNDERxLINEUNDERxLINEaaUNDERxLINEbbUNDERxLINE_UNDERxLINEccUNDERxLINEUNDERxLINEddUNDERxLINE_UNDERxLINEUNDERxLINEUNDERxLINEeeUNDERxLINEUNDERxLINEUNDERxLINEfUNDERxLINEUNDERxLINEUNDERxLINE("abc", "efg", "hij")
end

16、如果有使用 “$” 符号,使用DOLLARxMARK来替代

--OC - (NSString *)$testDolorMethod;
--lua
function DOLLARxMARKtestDolorMethod( self )
    print("lua $testDolorMethod")
    self:ORIGDOLLARxMARKtestDolorMethod()
    return "abc"
end

17、为对象添加属性

function myProperity(self)
    return self._myProperity
end
function setMyProperity(self, x)
    self._myProperity = x
end

18、hook dealloc 方法

waxClass{"TestDebugVC"}

function dealloc(self)
    print("lua dealloc ")
---do something
    self:ORIGdealloc() —如果不想调用原始的 dealloc,你就必须调用 self.super:dealloc()
—添加这一行代码去调用销毁函数
    waxGCInstance(self)
end

注意: self.super:dealloc() 或者  self:ORIGdealloc() 必须要被调用,否则就是内存泄漏。

19、调用变量的方法 :变量的方法不可以动态被调用, UIAlertView可以如下调用:

local alert = UIAlertView:init();
alert:setTitle(title);
alert:setMessage("aaaa");
alert:setTitle("bbbb");
alert:setDelegate(self);
alert:addButtonWithTitle("cancel");
alert:addButtonWithTitle("ok");
alert:setTag(20147701);
alert:show();

英文原文:https://github.com/alibaba/wax/wiki/Overview

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容