Как создать NSMutableArray, в котором объекты следуют протоколу? - PullRequest
0 голосов
/ 11 октября 2019

Как создать NSMutableArray, в котором объекты следуют протоколу? Например, в swift я могу сделать что-то вроде: var array:[MyProtocol] = [] Как реализовать это в objC

1 Ответ

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

В Objective-C вы объявляете переменную типа протокола, объявляя ее как id<SomeProtocol>, например:

@protocol SomeProtocol<NSObject>
...
@end

@interface SomeClass : NSObject<SomeProtocol> // base class NSObject, implements SomeProtocol
...
@end

@implementation SomeClass
...
@end

// a variable declaration somewhere which holds a reference to any object
// which implements SomeProtocol
id<SomeProtocol> anyObjectImplementingSomeProtocol = SomeClass.new;

Используя облегченные обобщенные значения Objective-C , вы можете расширить это доконтейнеры типа протокола, например:

NSMutableArray<id<SomeProtocol>> someArray = NSMutableArray.new;

Предупреждение: Облегченные обобщенные имена названы так, что по какой-то причине довольно легко обойти введенные ими ограничения, например, путем добавления объектакоторый не реализует SomeProtocol до someArray. Вы не получаете такие же сильные дженерики, как в Swift.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...