假设我在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]))
添加扩展以支持本机Swift可变参数:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。