是否有可能使@objc enum符合@objc协议?
下面的枚举显示错误Non-class type 'TestEnum' cannot conform to class protocol 'Testable'
@objc protocol Testable {
var isTesting: Bool { get }
}
// error: Non-class type 'TestEnum' cannot conform to class protocol 'Testable'
@objc enum TestEnum: Int, Testable {
case foo
var isTesting: Bool {
return true
}
}
Objective-C协议,无论是在Obj-C中定义的@protocol
还是在Swift中定义的@objc protocol
,都只能被类所采用。这是Obj-C中将协议定义为您期望类型实现的方法集合的事实:在Obj-C中只有类可以被消息传递,并且只有它们可以采用协议。
这延续到Swift:
注意
@objc
协议只能被继承自Objective-C类或其他@objc
类的类采用。它们不能被结构体或枚举所采用。
这意味着TestEnum
不能直接采用Testable
,但你可以做的是将枚举包装在一个类中,该类可以采用协议:
class TestEnumWrapper: Testable {
enum TestEnum: Int {
case foo
}
let value: TestEnum
var isTesting: Bool {
return true
}
}
这种方法在您的特定情况下是否可用取决于您需要对TestEnum
做什么。