Obj C сделать протокол, определенный метод инициализации как NS_DESIGNATED_INITIALIZER - PullRequest
0 голосов
/ 24 марта 2020

У меня есть протокол

// Protocol.h
- (instancetype)initWithConfig:(NSDictionary *)dictionary;

Класс, который init является назначенным инициализатором, подтверждает протокол

// ClassA.m
- (instancetype)init {
  return [self initWithConfig:nil]; //////////// !!!warning here**
}

- (instancetype)initWithConfig:(NSDictionary *)dictionary {
  self = [super init];
  if (self) {
    _ivar = @"default value";
    [self setupSomething];
  }
  return self;
}

Я получил предупреждение: Назначенный инициализатор должен только вызывать указанный инициализатор для 'super'

  1. Я знаю, что добавление initWithConfig: NS_DESIGNATED_INITIALIZER к интерфейсу или расширению может решить эту проблему, но это не то, что я хочу.
  2. Писать одни и те же логи c дважды - это не мой стиль.
  3. Добавление NS_DESIGNATED_INITIALIZER к методу протокола приводит к ошибке.

Извлечение метода кажется единственным разумный способ? Интересно, есть ли другой способ отклонить предупреждение?

...