свойство класса в iOS

У меня есть модель , как car:NSObject, у него есть свойствоname, colorи так далее.
Теперь у меня есть NSString *str=@"name";, я могу использовать его так [car str]?
возможно ли это?

Я пытался:

objc_property_t *properties = class_copyPropertyList([_model class], &propertyCount);

for (unsigned int i = 0; i < propertyCount; ++i) {
    objc_property_t property = properties[i];
    const char * Cname = property_getName(property);
    NSString *name = [NSString stringWithCString:Cname encoding:NSUTF8StringEncoding];

}

но это не помогает

2 ответа

  1. Необязательно погружаться непосредственно в среду выполнения Objective-C.

    Если ваш класс соответствует значению ключа, вы можете использовать -valueForKey:так:

    #import <Foundation/Foundation.h>
    
    // Declare the car.
    @interface Car : NSObject
    
    // Automatic properties are key-value compliant.
    @property (nonatomic, strong) NSString * name;
    @property (nonatomic, strong) NSString * color;
    
    @end
    
    @implementation Car
    @end
    
    // Entrypoint for command-line app to prove that this works
    int main(int argc, const char * argv[])
    {
        @autoreleasepool
        {
            // First, create our car.
            Car * car = [[Car alloc] init];
            car.name = @"My First Car";
            car.color = @"White";
    
            // Declare variables holding the names of the properties we want to access
            NSString * nameKey = @"name";
            NSString * colorKey = @"color";
    
            // Retrieve the values of those properties
            NSString * name = [car valueForKey:nameKey];
            NSString * color = [car valueForKey:colorKey];
    
            // Do something with the result.
            NSLog(@"My car '%@' is '%@'.", name, color);
        }
    
        return 0;
    }
    
  2. Да. [car name]можно сделать как (так как это метод, который берет указатель на объект и возвращает указатель на объект)[car performSelector:@selector(name)], и если вы хотите предоставить селектор динамически из строки, вы можете сделать:

    NSString *str = @"name";
    NSString *name = [car performSelector:NSSelectorFromString(str)];