在Swift中,我有这个枚举:
enum Foo: UInt8 {
case bar
case baz
}
我想给它一个可用的初始化器:
extension Foo {
init?(byName name: String) {
if name == "bar" {
self = .bar
}
else if name == "baz" {
self = .baz
}
else {
return nil
}
}
}
显然,这不能暴露给Objective-C,所以传统的解决方案是使用这样的新案例:
enum Foo: UInt8 {
case invalid = 0
case bar
case baz
}
这不是我想要的。当.invalid
做得很好时,我不希望有人在Swift中使用nil
。我希望我能做到这样的事情:
enum Foo: UInt8 {
#if objc
case invalid = 0
#endif
case bar
case baz
}
但这似乎没有完成这项工作。 有什么方法可以在Swift中编写只能在Objective-C中看到和使用的代码吗?也就是说,有没有办法在Swift中编写只在生成的{{{ 1}}文件?