像 Lua 函数一样调用 BLock
- --OC block void (^)())block
- block()
-
- --or call it like this
- luaCallBlockWithParamsTypeArray(block, {"void"});
-
-
- --OC block void (^)(NSString * code, NSDictionary * responseData))response
- block("abcd", {k1="v1", k2="v2"})
-
- --or call it like this
- luaCallBlockWithParamsTypeArray(block, {"void","id", "id"}, str, {k1="v1", k2="v2"})
-
-
- --OC block CGFloat(^)(CGFloat aFirstCGFloat, BOOL aBOOL, int aInt, NSInteger aInteger, float aFloat, CGFloat aCGFloat, id aId))block
-
- local res = block(TEST_VALUE_CGFLOAT, TEST_VALUE_BOOL, TEST_VALUE_INTEGER,TEST_VALUE_CGFLOAT)
-
- --or call it like this
- local res = luaCallBlockWithParamsTypeArray(block, {"CGFloat","CGFloat", "BOOL", "NSInteger", "CGFloat"}, TEST_VALUE_CGFLOAT, TEST_VALUE_BOOL, TEST_VALUE_INTEGER,TEST_VALUE_CGFLOAT)
-
问:应该什么时候使用 luaCallBlockWithParamsTypeArray?
答:当你想调用一个被获取的块时 toblock
- local blockGotBytoblock = toblock(
- function(code, responseData)
- print("lua code=" .. code .. " responseData=" .. tostring(responseData))
- end
- , {"void", "NSString *", "NSDictionary *"})
-
- luaCallBlockWithParamsTypeArray(blockGotBytoblock, {"void", "NSString *", "NSDictionary *"},
- "abc", {k1="v1", k2="v2"})
如果你想这样写OC代码:
- UIView *view = [UIView new];
- [self.view addSubview:view];
- view.backgroundColor = [UIColor greenColor];
- [view mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.view).offset(200);
- make.left.equalTo(self.view).offset(50);
- make.width.offset(10);
- make.height.offset(10);
- }];
那么 Lua 代码是
- local view = UIView:init()
- self:view():addSubview(view)
- view:setBackgroundColor(UIColor:greenColor())
- view:masUNDERxLINEmakeConstraints(toblock(
- function ( make )
- make:top():equalTo()(self:view()):offset()(200);
- make:left():equalTo()(self:view()):offset()(50);
- make:width():offset()(10);
- make:height():offset()(10);
- end
- ,{"void", "MASConstraintMaker *"}))
注意:你不能写 equalTo(self:view()) or offset(200),因为 equalTo、offset 不是一个接受参数的方法,它是一个返回块的方法!
自动测试 中的更多示例。