【问题标题】:How call to variadic method from Objective-C macro?如何从 Objective-C 宏调用可变参数方法?
【发布时间】:2015-11-13 16:37:03
【问题描述】:

我创建了可变参数方法的 va_list 版本:

+(void)myFunc:(NSString *)message args:(va_list)args;

并创建了调用上述函数的宏TESTLOG

#define TESTLOG(x,...) [MyExample myFunc:(x), ##__VA_ARGS__]

问题是当我尝试调用TESTLOG 宏时,我得到一个错误:

TESTLOG("test");
TESTLOG(@"test",@"test1");

预期的表达方式

我该如何解决这个问题?我尝试用... 替换args:(va_list)args,它正在工作,但就我而言,我需要使用va_list 和宏。

我认为我的问题在于宏中的定义。

【问题讨论】:

    标签: objective-c macros variadic-functions


    【解决方案1】:

    您不能将 __VA_ARGS__ 宏与 va_list 参数一起使用。您的 Objective-C 方法需要定义为:

    + (void)myFunc:(NSString *)message, ... ;
    

    那么你的宏可以是:

    #define TESTLOG(x,...) [MyExample myFunc:(x), __VA_ARGS__]
    

    【讨论】:

    • Rmaddy 你是对的,但在我的情况下情况更复杂......在这种情况下,我可以从objective-c代码运行这个函数,没关系,但是swift呢?如何从 swift 代码中调用此函数( MyExample.myFunc )?用可变参数方法?我没有成功从 swift 代码中调用可变参数方法,xcode 无法识别该函数(MyExample.myFunc)。你能解释一下如何声明调用 myFunc 的 swift 函数吗?
    • 这是一个完全独立的问题。您应该通过接受答案来关闭此问题,然后发布一个新问题,询问如何从 Swift 调用 Objective-C 可变参数方法。
    猜你喜欢
    • 2014-08-03
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多