像 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 不是一个接受参数的方法,它是一个返回块的方法!
自动测试 中的更多示例。

