Я хотел бы определить функцию в контексте JavascriptCore, которая принимает переменное количество аргументов.Переменный список аргументов в блок 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');"];
Я считаю, что ОАО обертка не проходит второй аргумент блока, потому что итерация на va_list
аварий после входа в первый аргумент.
Я также пробовал с соглашением NSArray*
, он не работает.
Возможно ли это в любом случае?
Я также пытался это сделать, когда определял обработчик журнала Objective-C, который занимал несколько аргументов, но не мог добиться этого даже при использовании NSLogv. Беспорядочный подход - вы можете попробовать сериализовать args в один аргумент через JSON, а затем распаковать его в свой Objective-C-обработчик. – Mike
Да, это был бы последний подход. На самом деле есть способ сделать это, используя обычный C API, с 'JSObjectMakeFunctionWithCallback', но я хотел бы уйти от этого интерфейса C, чтобы ARC могла обрабатывать память JS Value. –