簡體   English   中英

如何在Obj-C中使用回調定義Javascript函數?

[英]How do I define a Javascript function with a callback in Obj-C?

我正在使用JavaScriptCore評估我的應用程序中的一些簡單腳本。 我正在創建一個全局對象,並在其上定義一些屬性,如下所示:

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

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

因此,腳本可以訪問fields的值,依此類推。 我希望腳本能夠使用一個名為lookup的函數,並且我已經有此函數的Objective-C實現。

如何將屬性添加到全局對象,該對象是一個回調我的Objective-C方法的函數? 我看到有一個名為JSObjectMakeFunctionWithCallback的函數,但是它使用了諸如JSObjectRef的低級C構造,並且使用了C函數,而不是Objective-C塊,因此我無法在實現內部利用self

您可以將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM