假设我在Objective-c中有一个静态方法的类,如下所示:
+ (NSError *)executeUpdateQuery:(NSString *)query,...;
如何从Swift打电话?自动完成无法识别,编译器不满意:
MyClassName.executeUpdateQuery("")
抱怨’MyClassName.Type没有一个名为executeUpdateQuery的成员’
编写您的可变方法的va_list版本;
+ (NSError *)executeUpdateQuery:(NSString *)query,... { va_list argp; va_start(argp,query); NSError *error = [MyClassName executeUpdateQuery: query args:argp]; va_end(argp); return error; } + (NSError *)executeUpdateQuery:(NSString *)query args:(va_list)args { NSLogv(query,args); return nil; }
这可以从Swift调用
MyClassName.executeUpdateQuery("query %d,%d %d",args: getVaList([1,2,3,4]))
protocol CFormatFunction { class func executeUpdateQuery(format: String,_ args: CVarArg...) -> NSError? } extension MyClassName : CFormatFunction { class func executeUpdateQuery(format: String,_ args: CVarArg...) -> NSError? { return MyClassName.executeUpdateQuery(format,args:getVaList(args)) } } MyClassName.executeUpdateQuery("query %d %@ %.2f",99,"Hello",3.145)
小心,Swift不提供NS_FORMAT_FUNCTION警告(-Wformat)
MyClassName.executeUpdateQuery("query %@",99)