jamztang of MagicSketch
12/23/2016 - 3:25 AM

Wrap a JavaScript closure that allows you to pass to a Objective-C class and retrieve that later

Wrap a JavaScript closure that allows you to pass to a Objective-C class and retrieve that later

var block = function(name, handler) {
    var runtime = Mocha.alloc().init();
    runtime.evalJSString("var " + name + " = " + handler);
    return function() {
       var args = [];
       for (i = 0; i < arguments.length; i++) {
          args.push(arguments[i]);
       }
       return runtime.callFunctionWithName_withArgumentsInArray_(name, args);
    }
}

/* e.g.

var object = Class("Random", NSObject, (function() {
        var _block, _value;
        return {
            "block": function() {
                return _block(_value);
            },
            "setBlock:": function(value) {
                _block = value;
            },
            "setValue:": function(value) {
                _value = value;
            }
        };
    })()).alloc().init();

var t = block("square", function(a) {
    return a * a;
})
log(object.setBlock(t))
log(object.setValue(10));
log(object.block())
*/