gpt4 book ai didi

ios - 如何自动打印(使用 NSLog)一个类的所有属性?

转载 作者:行者123 更新时间:2023-11-28 18:57:23 26 4
gpt4 key购买 nike

我认为在 objective-c 中打印出任何类的所有属性的值是非常困难的,因为属性的类型很复杂。

但是如果类包含简单类型的属性(如 NSString、int、double、boolean),有什么方法可以自动使用 NSLog 而不是 NSLog 手动获取每个属性的值?

已更新:

你给我的所有解决方案仍然是手动的。有没有什么方法可以遍历一个类的所有属性,NSLog variable_namevariable_value。这正是我所期望的。

最佳答案

您可以通过重写-(void)description 方法来做到这一点。

例子:假设我们有一个简单的 Car 类。

@interface Car : NSObject

@property (copy, nonatomic) NSString *model;
@property (copy, nonatomic) NSString *make;
@property (strong, nonatomic) NSDate *registrationDate;
@property (assign, nonatomic) NSInteger mileage;
@property (assign, nonatomic) double fuelConsumption;

@end

@implementation
- (NSString*)description {
return [NSString stringWithFormat:@"<%@:%p %@>",
[self className],
self,
@{ @"model" : self.model,
@"make" : self.make,
@"registrationDate": self.registrationDate,
@"mileage" : @(self.mileage),
@"fuelConsumption" : @(self.fuelConsumption)
}];
}
@end

将其放入 NSDictionary 将在控制台中创建非常好的输出。

另一方面,您可以在 NSObject 类上创建类别并执行如下操作:

- (NSString*)myDescriptionMethod {
NSMutableDictionary *dict = [NSMutableDictionary new];
unsigned int count;
objc_property_t *properties = class_copyPropertyList([self class], &count);

for (int i = 0; i < count; i++) {
const char *property = property_getName(properties[i]);
NSString *propertyString = [NSString stringWithCString:property encoding:[NSString defaultCStringEncoding]];
id obj = [self valueForKey:propertyString];
[dict setValue:obj forKey:propertyString];
}

free(properties);
return [NSString stringWithFormat:@"<%@ %p %@>",
[self class],
self,
dict];
}

然后你将避免在你的类中覆盖 -(void)description 方法。

here获取

关于ios - 如何自动打印(使用 NSLog)一个类的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com