你如何称之为Swift的Objective-C可变方法?

你如何称之为Swift的Objective-C可变方法?,第1张

概述假设我在Objective-c中有一个静态方法的类,如下所示: + (NSError *)executeUpdateQuery:(NSString *)query, ...; 如何从Swift打电话?自动完成无法识别,编译器不满意: MyClassName.executeUpdateQuery("") 抱怨’MyClassName.Type没有一个名为executeUpdateQuery的成员’ 假设我在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)
总结

以上是内存溢出为你收集整理的你如何称之为Swift的Objective-C可变方法?全部内容,希望文章能够帮你解决你如何称之为Swift的Objective-C可变方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1054919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存