我正在尝试扩展可以打印任何类型对象的NSLog。意思是,我的自定义类获取需要从用户打印的值并检查其类类型,然后它将按所需格式打印。
考虑我的扩展班级名称为MyLog
(因此它包含MyLog.h
和MyLog.m
)
MyLog.h:
void MyLog (id objectValue);
MyLog.m:
#import "MyLog.h"
void MyLog (id objectValue)
{
if ([objectValue isKindOfClass:[NSString class]])
{
NSLog(@"%@",objectValue); //Same for NSArray, NSDictionary, NSMutableArray, NSMutableDictionary
}
else if ([objectValue isKindOfClass:[NSData class]])
{
NSLog(@"%@",[[NSString alloc]initWithData:objectValue encoding:NSUTF8StringEncoding]);
}
....
....
}
所以,如果我在前缀文件中包含这个类(MyLog.h
),我可以从任何类调用下面的方法来简单地打印给定的对象。
MyLog(valueOfObject);
问题:
CGRect
,CGpoint
,CGSize
相关内容(不是对象)无法作为id
传递给MyLog()
函数
我尝试打印对象名称及其值,以提高可读性。请参阅此post。
例如,
NSString *myString = @"Welcome";
MyLog(myString);
这将打印myString: Welcome
而不是仅打印Welcome
。
我可以实现这个我定义的预处理器,如
#define MYLOG(x) NSLog( @"%s:%@",#x, x)
所以,我尝试按以下方式自定义
#define MYLOG(x) NSLog(@"%s:%@",#x, MyLog(x))
但它会引发“Argument type 'void' is incomplete
”错误。
问题:
需要帮助!!只是困惑!!
答案 0 :(得分:0)
如果您实施-(NSString*)description
,则可以使用NSLog(@"%@", myObject)
打印NSLog中的任何对象。
因此,只需在要打印的对象类中添加-(NSString*)description
,然后只返回您认为与该对象相关的NSString
值。