"frameworkname"-Swift.h 中的通用 类 导致 Xcode 中的 "Type name requires a specifier or qualifier" 错误 6.3

Generic classes in "frameworkname"-Swift.h causes "Type name requires a specifier or qualifier" error in Xcode 6.3

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

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

Objective-c 中没有 gerenics 的等价物,我该如何解决这个问题?

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

@property (nonatomic) NSObject * __nonnull anRsvpStore;

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

我可以停止创建此兼容性 header,方法是在 Build Settings -> Swift Compiler - Code Generation -> Intall Objective-C Compatibility Header 中设置为 No

由于我没有在我的项目中编写 Objective-C 代码,所以这个选项没有问题,但这与其说是一种解决方案,不如说是兼容性方面泛型的解决方案 header。

另一个解决方法 是,如果您使用 private 标记您的属性,那么它们将不会出现在兼容性 header 中。

Swift 2.0 更新

A new @nonobjc attribute is introduced to selectively suppress ObjC export for instance members that would otherwise be @objc . (16763754) Blockquote

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

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

如果您不需要在objc中使用swift,只需将Intall Objective-C Compatibility Header设置为No.

如果你需要在objc中使用swift,你必须编辑-Swift.h并在Objective-C Generated Interface Header Name[=19]中设置它=]