错误:属性实现必须在&#39; <classname>&#39;中声明。接口或其扩展之一

时间:2018-05-29 17:18:11

标签: objective-c swift

我有一个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行中收到此错误时:

  

错误:属性实现必须在接口中声明   &#39; MyObjcViewController&#39;或其中一个扩展

是否可以合成Swift协议中定义的属性?

1 个答案:

答案 0 :(得分:-1)

嗯,这有点令人尴尬。在研究这个问题时,我想到了在Objc中延迟这个协议的想法,我把它留在了代码的某个地方:

@protocol Themeable
@end;

此声明位于头文件中,并未触发&#34; Redeclaration&#34;错误:(

删除上述声明使@synthesize按预期工作。