"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]中设置它=]
我更新到 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]中设置它=]