Доступ к переменным экземпляров свойств, унаследованных от протоколов - PullRequest
0 голосов
/ 30 апреля 2018

Я создал простой протокол, который применяет свойство NSString для соответствующих классов:

@protocol CPTSettingViewModel <NSObject>

@property (nonatomic) NSString *titleText;

@end

Когда я создаю класс, который соответствует этому протоколу, XCode предлагает мне синтезировать свойство:

@synthesize titleText;

Моя проблема в том, что когда я пытаюсь сослаться на переменную экземпляра этого свойства в моем инициализаторе, я получаю ошибку:

Использование необъявленного идентификатора '_titleText'; Вы имели в виду titleText?

Как я могу получить доступ к переменным экземпляра свойств, унаследованных от протоколов, а не получить что-то вроде этого, где я использую само свойство?

- (instancetype)initWithTitleText:(NSString *)titleText selectionText:(NSString *)selectionText {
    self = [super init];
    if (self) {
        self.titleText = titleText;
        _selectionText = selectionText;
    }
    return self;
}

1 Ответ

0 голосов
/ 30 апреля 2018

Имя переменной экземпляра по умолчанию при использовании @synthesize - это имя самого свойства - в данном случае titleText. Автосинтез по умолчанию (который не работает из-за свойства, присутствующего в протоколе) вставит эквивалент @synthesize titleText = _titleText, то есть, как подчеркивания становятся обычным именем в этом случае. Я полагаю, что вы можете просто указать имя с подчеркиванием (т.е. @synthesize titleText = _titleText), чтобы имя переменной экземпляра соответствовало ожидаемому.

...