你如何称之为Swift的Objective-C可变方法?
发布时间:2020-12-14 05:57:00 所属栏目:百科 来源:网络整理
导读:假设我在Objective-c中有一个静态方法的类,如下所示: + (NSError *)executeUpdateQuery:(NSString *)query,...; 如何从Swift打电话?自动完成无法识别,编译器不满意: MyClassName.executeUpdateQuery("") 抱怨’MyClassName.Type没有一个名为executeUpda
假设我在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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |