override property from superclass in subclass

前端 未结 2 961
深忆病人
深忆病人 2021-01-06 15:37

I want to override an NSString property declared in a superclass. When I try to do it using the default ivar, which uses the the same name as the property but with an unders

相关标签:
2条回答
  • 2021-01-06 15:58

    to access the superclass variables, they must be marked as @protected, access to such variables will be only inside the class and its heirs

    @interface ObjectA : NSObject
    {
        @protected NSObject *_myProperty;
    }
    @property (nonatomic, strong, readonly) NSObject *myProperty;
    @end
    
    @interface ObjectB : ObjectA
    @end
    
    @implementation ObjectA
    @synthesize myProperty = _myProperty;
    @end
    
    @implementation ObjectB
    - (id)init
    {
        self = [super init];
        if (self){
            _myProperty = [NSObject new];
        }
        return self;
    }
    @end
    
    0 讨论(0)
  • 2021-01-06 15:59

    Only the superclass has access to the ivar _species. Your subclass should look like this:

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

    That sets the value to a default if it isn't currently set at all. Another option would be:

    - (NSString *)species {
        NSString *result = [super species];
        if (!result) {
            result = @"Home sapiens";
        }
    
        return result;
    }
    

    This doesn't update the value if there is no value. It simply returns a default as needed.

    0 讨论(0)
提交回复
热议问题