调用它
我正在使用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:]
如果该值无法视为JavaScript函数,则返回nil
。如果JS函数没有明确返回值,则它隐式返回JavaScript值undefined
。因此,看起来您只需尝试调用JS功能并处理案例,如果返回nil
。
一个不创建任何全局对象的单线线:
// evaluates to true if value is a function, false otherwise
[[value.context evaluateScript:@"(obj) => typeof obj === 'function'"] callWithArguments:@[value]].toBool