swift中有条件编译的case语句

时间:2015-01-20 01:38:53

标签: swift conditional-compilation

我在Swift中使用计算属性实现了一个枚举语句。我想添加有条件编译的值,例如仅适用于某些配置。

以下是我尝试做的一个例子:

enum Rows: Int
{
    case Row1
    case Row2
    #if DEBUG
    case Debug
    #endif

    var rowTitle: String
    {
        case Row1: return "Row 1"
        case Row2: return "Row 2"
        #if DEBUG
        case Debug: return "Debug"
        #endif
    }
}

这似乎得到支持,因为我在switch语句中的case语句中收到以下错误消息:

  

'壳体'标签只能出现在'开关内?声明

有没有办法在Swift中执行此操作?

谢谢,
大卫

4 个答案:

答案 0 :(得分:2)

这是Swift中的known bug。目前无法在交换机内进行条件编译。

答案 1 :(得分:1)

enum案例的条件编译现在可以在Swift 4中使用。

enum Foo {
    case bar

    #if DEBUG
    case baz
    #endif
}

let bar = Foo.bar

#if DEBUG
let baz = Foo.baz
#endif

答案 2 :(得分:0)

条件编译的语法看起来是正确的。但是,当我将代码粘贴到游乐场时,我会遇到多个错误。第一个是以var rowTitle开头的行,错误是“枚举可能不包含存储的属性”。

答案 3 :(得分:0)

这是您的代码版本,在语法上对于计算变量rowTitle的实现是正确的:

enum Rows: Int
{
    case Row1
    case Row2

    var rowTitle: String {
            switch self {
            case Row1:
                return "Row 1"
            case Row2:
                return "Row 2"
        }
    }
}

说,这可能就是你在问题中的意思......但是不起作用:

enum Rows: Int
{
    case Row1
    case Row2
    #if DEBUG
    case Debug
    #endif

    var rowTitle: String {
        switch self {
        case Row1:
            return "Row 1"
        case Row2:
            return "Row 2"
        }
        #if DEBUG
            switch self {
            case Debug:
            return "Debug"
            default:
            break
            }
        #endif
    }
}

编译器不会给您任何错误,但您将无法使用Debug案例。