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

前端之家收集整理的这篇文章主要介绍了你如何称之为Swift的Objective-C可变方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我在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相关文章