Ошибка: реализация свойства должна иметь свое объявление в интерфейсе '<classname>' или в одном из его расширений. - PullRequest
0 голосов
/ 29 мая 2018

У меня есть расширение Swift следующим образом:

@objc
protocol Themeable: class {
    @objc var themeGradient: Gradient { get set }
}

В Objc у меня есть некоторые контроллеры представления, использующие этот протокол, используя @synthesize для свойства.

#import "MyProject-Swift.h"

@interface MyObjcViewController () <Themeable>
@end;

@implementation MyObjcViewController
@synthesize themeGradient;
...
@end;

Когдаздание Я получаю эту ошибку в строке @synthesize:

Ошибка: реализация свойства должна иметь свое объявление в интерфейсе 'MyObjcViewController' или в одном из расширений

Можно ли синтезировать свойства, определенные в протоколах Swift?

1 Ответ

0 голосов
/ 29 мая 2018

Ну, это немного смущает.Работая над этим, я обдумывал идею задержки этого протокола в Objc, и у меня это осталось где-то в коде:

@protocol Themeable
@end;

Это объявление было в заголовочном файле и не вызывало "Ошибка «Переобъявление»: (

Удаление вышеуказанного объявления заставило @synthesize работать как задумано.

...