我有一个objectiveC类,我可以从javascript vai webscriptobject调用我的方法。但是,我想从javascript调用我的函数提供可变数量的参数。例如,
myclass.myfunction(arg1,arg2,arg3 ....)其中,在objectiveC方面,该函数不限于特定数量的参数。我想要使用varargs。
之前有人这样做过吗?
答案 0 :(得分:1)
- (NSNumber *) addValues:(int) count, ... {
va_list args;
va_start(args, count);
NSNumber *value;
double retval;
for( int i = 0; i < count; i++ ) {
value = va_arg(args, NSNumber *);
retval += [value doubleValue];
}
va_end(args);
return [NSNumber numberWithDouble:retval];
}
我希望这会有所帮助。
答案 1 :(得分:1)
对于我的具体问题,我最终在我的scriptobject中实现了以下内容。它允许我与函数名称进行字符串比较并使用传入的数组。理想情况下应该对数组中的参数进行一些类型检查...
(id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
{
//NSLog(@" debug WABridge invokeUndefinedMethodFromWebScrip dump name: %@", name);
//NSLog(@" debug WABridge invokeUndefinedMethodFromWebScript args: %@", args);
if ([name isEqualToString:@"javascriptToCWithArgs"])
{
std::vector<std::wstring> dataArray;
dataArray.reserve([args count]);
for (id object in args) {
std::wstring valAsWstring = NSStringToStringW(object);
//place into vector
dataArray.push_back(valAsWstring);
}
//callback into my code
if (m_pWebView!= nil)
{
m_pWebView->m_pObjectiveCWebViewWrapper->getWebViewListener()->onMessageFromPageWithArgs(dataArray);
}
}
else
{
NSLog(@"Bridge undefined/unsupported function");
}
return nil;
}