使@objc enum符合@objc协议?



是否有可能使@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做什么。

最新更新