我更新到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?
答案 0 :(得分:5)
我可以通过设置Build Settings
- &gt;停止创建此兼容性标头Swift Compiler - Code Generation
- &gt; Intall Objective-C Compatibility Header
到No
。
由于我没有在我的项目中编写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生成的接口标题名称