Я использую JavaScriptCore для взаимодействия с кодом Objective-C.
В JSValue нет метода isFunction, но я хочу проверить, является ли JSValue функцией JS, и вызвать ее из Objective-C.
Я использую JavaScriptCore для взаимодействия с кодом Objective-C.
В JSValue нет метода isFunction, но я хочу проверить, является ли JSValue функцией JS, и вызвать ее из Objective-C.
В итоге я ввел небольшой код javascript, чтобы вернуть результат typeof
[context evaluateScript:@"function is(obj){ return typeof obj }"];
JSValue *is = [[context globalObject] valueForProperty:@"is"];
JSValue *type = [is callWithArguments:@[ is ]];
Похоже, это никак не проверить. Вы можете только проверить, что ваша функция является объектом (а в JS функции являются объектами).
Согласно документации, -[JSValue callWithArguments:]
возвращает nil
, если значение нельзя рассматривать как функцию JavaScript. Если функция JS не возвращает значение явно, она неявно возвращает значение JavaScript undefined
. Итак, похоже, вы можете просто попытаться вызвать функцию JS и обработать случай, если она вернет nil
.