如何在C/Objective-C中异步回调Lua函数?

我想要将Objective-C的http请求封装到Lua中,但是我不知道如何异步调用传递的函数参数。当我在回调函数中使用lua_State时,它是无效的。 有没有人能帮忙?

/*
 在Lua中的使用:

 function successHandler(result)
    print('success: '..result)
 end

 function failureHandler(error)
    print('failure: '..error)
 end

 httpRequest(urlString, successHandler, failureHandler)
*/
static int httpRequestProxy(lua_State *L)
{
    size_t l;

    const char * url_ = luaL_checklstring(L, 1, &l);
    NSString *url = [NSString stringWithUTF8String:url_];

    [HttpManager request:url success:^(NSString * result) {
        NSLog(@">>>>>>>> lua state top: %d", lua_gettop(L)); // return 0

        NSLog(@">>>>>>>> success: %@", result);

        if (lua_isfunction(L, 2))
        {
            lua_pushstring(L, [result cStringUsingEncoding:NSUTF8StringEncoding]);
            lua_call(L, 1, 0);
        }
    } failure:^(NSError * _Nonnull error) {
        NSLog(@">>>>>>>> failure: %@", error.localizedDescription);

        if (lua_isfunction(L, 3))
        {
            lua_pushstring(L, [error.localizedDescription cStringUsingEncoding:NSUTF8StringEncoding]);
            lua_call(L, 1, 0);
        }
    }];

    return 0;
}
点赞