加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

你如何称之为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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读