NSMutableArray новый с типом протокола - PullRequest
0 голосов
/ 04 октября 2019
  1. Как избавиться от предупреждения и не использовать [@[] mutableCopy]:

// Несовместимые типы указателей, назначаемые для «NSMutableArray *» из «NSMutableArray *»

@protocol Coordinatorable <NSObject>

@property (nonatomic, strong, readonly) UINavigationController *presenter;
@property (nonatomic, strong, readonly) NSMutableArray<Coordinatorable>*childCoordinators;

@end


self.childCoordinators = [[NSMutableArray alloc] init]; //Incompatible pointer types assigning to 'NSMutableArray<Coordinatorable> *' from 'NSMutableArray *'
self.childCoordinators = [@[] mutableCopy]; //works without issue

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Я считаю, что причина вашей проблемы в том, как вы декларируете свою собственность. Строка:

@property (nonatomic, strong, readonly) NSMutableArray<Coordinatorable>*childCoordinators;

должна быть:

@property (nonatomic, strong, readonly) NSMutableArray<id<Coordinatorable>>*childCoordinators;

Использование id<SomeeProtocol> - это то, что необходимо при обращении к объектам, которые соответствуют протоколу.

1 голос
/ 04 октября 2019

Как избавиться от предупреждения и не использовать [@ [] mutableCopy]:

Привести результат:

self.childCoordinators = (NSMutableArray<Coordinatorable>*)[[NSMutableArray alloc] init];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...