您当前的位置:首页 > 计算机 > 编程开发 > Lua

在 Lua 中调用 OC BLock

时间:12-14来源:作者:点击数:

像 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),因为 equalTooffset 不是一个接受参数的方法,它是一个返回块的方法!

自动测试 中的更多示例。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐