2013-10-21 97 views
2

我正在使用JavaScriptCore来评估我的应用中的一些简单脚本。我创建一个全局对象,并对其定义,像这样的一些属性:如何在Obj-C中用回调定义一个Javascript函数?

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

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

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

如何向全局对象添加一个属性,该对象是一个回调我的Objective-C方法的函数?我看到有一个叫做JSObjectMakeFunctionWithCallback的函数,但是它使用低级C结构(如JSObjectRef),并且采用C函数,而不是Objective-C块,所以我不能在实现中使用self

回答

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

相关问题