Я новичок в ObjectiveC и несколько лет работаю в Swift. Поэтому я не понимаю объясненную ниже ошибку в Xcode:
Аргументы типа не могут быть применены к неклассовому типу 'id'
Мой протокол:
@protocol ExampleProtocol<NSObject>
@required
-(NSString *)title;
-(NSString *)album;
@end
Моя реализация в файле MyService.h:
@interface MyService : NSObject
@property (nonatomic, assign, readwrite) id<ExampleProtocol> delegate;
@end
Ошибка возникает в строке:
> @property (nonatomic, assign, readwrite) id<ExampleProtocol> delegate;
Кроме того:
- Я импортировал требуемый файл .h, в котором код ExampleProtocol находится в файле MyService.m
- Добавил
@class ExampleProtocol;
в мой файл MyService.h вверху.
Также пробовал:
Создание протокола Swift с импортированием
@objc
и: class
через app-Bridging.h дает тот же результат с тем же сообщением об ошибке.Чистая сборка
Чистая папка сборки (удалены производные данные)
Единственное, что сработало, - это удалить строку из публичного интерфейса в частный. В этом нет смысла. Я не хочу устанавливать делегата из другого класса, и создание общедоступного сеттера, который устанавливает частный делегат, является уродливым обходным путем.
Любое предложение было бы полезным. Хотелось бы понять, почему так происходит. В моем проекте есть много других протоколов, написанных на ObjectiveC, которые отлично работают.
@class ExampleProtocol;
?ExampleProtocol
- это протокол, а не класс. Он вам не нужен, если вы импортируете заголовок, но если вы не импортируете заголовок, он должен быть@protocol ExampleProtocol;
- person Willeke   schedule 26.12.2017