我是否可以编写一个仅在Objective-C中可用的Swift枚举案例?

时间:2017-10-19 20:54:14

标签: objective-c swift conditional-compilation

在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}}文件?

0 个答案:

没有答案