“frameworkname”-Swift.h中的通用类导致Xcode 6.3中的“类型名称需要说明符或限定符”错误

时间:2015-04-09 08:23:34

标签: objective-c swift generics xcode6.3

我更新到Xcode 6.3,我的工作区中有两个独立的项目(一个是框架)。现在,Xcode自动生成了这个“frameworkname”-Swift.h头文件,但是当我将泛型类作为属性时,它会生成以下行:

@class Presentation;
SWIFT_CLASS("_TtC13BusinessLogic31MeetupDetailViewControllerModel")
@interface MeetupDetailViewControllerModel : NSObject
@property (nonatomic) /* RsvpStore<Rsvp> */ anRsvpStore;
@end

Objective-c中没有gerenics,所以我该如何解决这个问题呢?

如果我将类型设置为NSObject,我发现我可以解决问题:

@property (nonatomic) NSObject * __nonnull anRsvpStore;

但是对于每个构建,此文件都会重新创建为相同的错误版本。那么如何强制此构建将此泛型的类型设置为NSObject?

2 个答案:

答案 0 :(得分:5)

我可以通过设置Build Settings - &gt;停止创建此兼容性标头Swift Compiler - Code Generation - &gt; Intall Objective-C Compatibility HeaderNo

由于我没有在我的项目中编写Objective-C代码,因此该选项没有问题,但这是一种解决方法,而不是兼容性头中的泛型解决方案。

另一种解决方法是,如果您使用private标记属性,则它们不会出现在兼容性标头中。

Swift 2.0更新

  

一个新的   @nonobjc   引入属性以选择性地抑制实例成员的ObjC导出   否则是   @objc   。 (16763754)   块引用

未经测试,但这看起来像是一种解决方案。

答案 1 :(得分:2)

我在#1873 https://github.com/realm/realm-cocoa/issues/1873

中解决了

如果您不需要在objc中使用swift,只需将 Intall Objective-C兼容性标题设置为否。

如果需要在objc中使用swift,则必须编辑-Swift.h并将其设置为 Objective-C生成的接口标题名称