5

我更新到 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?

4

2 回答 2

5

Build Settings我可以通过将-> Swift Compiler - Code Generation->设置为Intall Objective-C Compatibility Header来停止创建此兼容性标头No

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

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

斯威夫特 2.0 更新

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

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

于 2015-04-09T11:35:10.630 回答
2

我在 #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中设置它

于 2015-06-11T10:00:24.480 回答