【问题标题】:How do I define a Javascript function with a callback in Obj-C?如何在 Obj-C 中定义带有回调的 Javascript 函数?
【发布时间】:2013-10-21 13:32:13
【问题描述】:

我正在使用 JavaScriptCore 来评估我的应用程序中的一些简单脚本。我正在创建一个全局对象并在其上定义一些属性,如下所示:

JSContext *context = [[JSContext alloc] init];
JSValue *globalObject = [context globalObject];

[globalObject setValue:fields forProperty:@"fields"];
...

那么脚本就可以访问fields 中的值等等。我希望脚本能够使用一个名为 lookup 的函数,并且我已经有了这个函数的 Objective-C 实现。

如何向全局对象添加一个属性,该对象是一个回调我的 Objective-C 方法的函数?我看到有一个名为JSObjectMakeFunctionWithCallback 的函数,但是它使用了像JSObjectRefs 这样的低级C 结构,并且采用了一个C 函数,而不是一个Objective-C 块,所以我不能在里面使用self实施。

【问题讨论】:

    标签: javascript ios objective-c javascriptcore


    【解决方案1】:

    您可以将 Objective-C 块传递给 JSContext,然后它将表现为函数。这样,您的脚本可以回调您的 iOS 代码:

    context[@"factorial"] = ^(int x) {
        int factorial = 1;
        for (; x > 1; x--) {
            factorial *= x;
        }
        return factorial;
    };
    [context evaluateScript:@"var fiveFactorial = factorial(5);"];
    JSValue *fiveFactorial = context[@"fiveFactorial"];
    NSLog(@"5! = %@", fiveFactorial);
    

    来源:Bignerdranch

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多