首页 > 解决方案 > 可变参数方法包装器 ios Objective-c

问题描述

我正在创建一个框架并在为该类制作包装器时卡住了

logger.h具有以下方法

-(void) logError:(nonnull NSString *) info, ...;

我做了一个logger.h文件名Mlogger.h的包装器

包装文件Mlogger.h具有相同的原型

-(void) logError:(nonnull NSString *) info, ...;

我的Mlogger.m文件实现如下,

-(void) logError:(nonnull NSString *) info, ... {
    va_list args;
    va_start(args, info);
    [[Logger sharedManager] logError:info];
      //LogError(info,args); //also tried with macro
    va_end(args);
}

宏在logger.h中定义:

#define LogError(format, ...) [[Logger sharedManager] logError:format , ##__VA_ARGS__ ];

我已经导入了包装类Mlogger.h并执行了类似的调用,

[logger logDebug:@"Initialized successfully"];
[logger logDebug:@"URL: %@",@"www.google.com"];

第一行打印完美,但第二行打印 URL : Logger: 0x604000226cc0..

预期输出是 URL:www.google.com

我的实现是否正确?而不是那么我如何传递可变参数的值?

标签: iosobjective-cwrappervariadic

解决方案


推荐阅读