我想覆盖在父类(super class)中声明的 NSString 属性。当我尝试使用默认 ivar 执行此操作时,该 ivar 使用与属性相同的名称但带有下划线,它不会被识别为变量名称。它看起来像这样......

父类(super class)的接口(interface)(我在这个类中没有实现getter或setter):

//Animal.h
@interface Animal : NSObject

@property (strong, nonatomic) NSString *species;

@end

子类中的实现:
//Human.m
@implementation

- (NSString *)species
{
    //This is what I want to work but it doesn't and I don't know why
    if(!_species) _species = @"Homo sapiens";

    return _species;

}

@end

最佳答案

只有父类(super class)可以访问 ivar _species 。您的子类应如下所示:

- (NSString *)species {
    NSString *value = [super species];
    if (!value) {
        self.species = @"Homo sapiens";
    }

    return [super species];
}

如果当前根本没有设置该值,则会将该值设置为默认值。另一种选择是:
- (NSString *)species {
    NSString *result = [super species];
    if (!result) {
        result = @"Home sapiens";
    }

    return result;
}

如果没有值,这不会更新值。它只是根据需要返回一个默认值。

关于ios - 覆盖子类中父类(super class)的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17127056/

10-13 06:34