如何在Swift枚举中打印关联值?

时间:2015-04-08 04:42:50

标签: swift enumeration

我正在寻找一种在Swift中打印enumetations的关联值的方法。即。以下代码应该为我打印"ABCDEFG",但事实并非如此。

enum Barcode {
    case UPCA(Int, Int, Int, Int)
    case QRCode(String)
}

var productCode = Barcode.QRCode("ABCDEFG")
println(productCode)

// prints (Enum Value)

阅读this stackoverflow问题的答案,该问题与打印枚举的原始值有关,我尝试了下面的代码,但它给了我一个错误

enum Barcode: String, Printable {
    case UPCA(Int, Int, Int, Int)
    case QRCode(String)
    var description: String {
        switch self {
            case let UPCA(int1, int2, int3, int4):
                return "(\(int1), \(int2), \(int3), \(int4))"
            case let QRCode(string):
                return string
        }
    }
}

var productCode = Barcode.QRCode("ABCDEFG")
println(productCode)

// prints error: enum cases require explicit raw values when the raw type is not integer literal convertible
//        case UPCA(Int, Int, Int, Int)
//             ^

由于我是Swift的新手,我无法理解错误消息是什么。有人知道是否可能。

1 个答案:

答案 0 :(得分:2)

问题是您在Barcode枚举中添加了显式原始类型 - String。声明它符合Printable就是您所需要的:

enum Barcode: Printable {
    case UPCA(Int, Int, Int, Int)
    case QRCode(String)
    var description: String {
        // ...
    }
}

编译器的抱怨是您没有使用非整数原始值类型指定原始值,但无论如何都不能使用关联值。没有关联类型的原始字符串值可能如下所示:

enum CheckerColor: String, Printable {
    case Red = "Red"
    case Black = "Black"
    var description: String {
        return rawValue
    }
}