gpt4 book ai didi

iphone - JavascriptCore block 的变量参数列表

转载 作者:行者123 更新时间:2023-12-03 18:53:57 26 4
gpt4 key购买 nike

我想在 JavascriptCore 上下文中定义一个函数,该函数采用可变数量的参数。

类似这样的事情:

JSVirtualMachine* virtualMachine = [[JSVirtualMachine alloc] init];
JSContext* ctx = [[JSContext alloc] initWithVirtualMachine:virtualMachine];

ctx[@"func"] = ^(JSValue* value, ...){
va_list args;
va_start(args, value);
for (JSValue *arg = value; arg != nil; arg = va_arg(args, JSValue*)) {
NSLog( @"%@", arg);
}
va_end(args);
};

[ctx evaluateScript:@"func('arg1', 'arg2');"];

我相信 JSC 包装器不会将第二个参数传递给 block ,因为在记录第一个参数后迭代 va_list 会崩溃。

我也尝试过使用 NSArray* 约定,但它不起作用。

这有可能吗?

最佳答案

来自 JSContext.h:

// This method may be called from within an Objective-C block or method invoked
// as a callback from JavaScript to retrieve the callback's arguments, objects
// in the returned array are instances of JSValue. Outside of a callback from
// JavaScript this method will return nil.
+ (NSArray *)currentArguments;

导致以下结果:

ctx[@"func"] = ^{
NSArray *args = [JSContext currentArguments];
for (JSValue *arg in args) {
NSLog( @"%@", arg);
}
};

[ctx evaluateScript:@"func('arg1', 'arg2');"];

关于iphone - JavascriptCore block 的变量参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21692720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com