【发布时间】:2019-05-08 00:56:30
【问题描述】:
鉴于有一个用 Swift 编写的兼容 ObjC 的枚举:
// from MessageType.swift
@objc enum MessageType: Int {
case one
case two
}
还有一个带有 MessageType 类型属性的 ObjC 类,必须提前声明:
// from Message.h
typedef NS_ENUM(NSInteger, MessageType);
@interface Message: NSObject
@property (nonatomic, readonly) MessageType messageType;
@end
为了在 Swift 代码库的其余部分中使用 Message,将 Message.h 添加到桥接头中:
// from App-Bridging-Header.h
#import "Message.h"
现在,假设有一个 Swift 类试图读取 messageType 属性:
// from MessageTypeReader.swift
class MessageTypeReader {
static func readMessageType(of message: Message) -> MessageType {
return message.messageType
}
}
编译将失败并出现以下错误:
Value of type 'Message' has no member 'messageType'
我的问题是:有没有办法向前声明一个 Swift 枚举,以便 MessageTypeReader 能够访问该属性?
注意:我知道将 Message 重写为 Swift 或将 App-Bridging-Header.h 导入 Message.h 的可能性,但这不是这里的选项,我正在寻找一种可以与当前设置。
【问题讨论】:
标签: ios objective-c swift objc-bridging-header