为什么将对象指针前缀添加到值中? (斯威夫特4)

时间:2018-04-08 07:40:36

标签: swift enums swift4

我正在尝试解析字符串并将它们保存到数组中:

enum Token {
    case Number(Int)
    case Minus
    case Plus
}

var tokens = [Token]()

for char in ["1","-","3","+","9"] {switch char {
        case "0"..."9":
            //start of a number - need to grab the rest
            let digit = Int(String(char))!
            tokens.append(.Number(digit))
        case "+":
            tokens.append(.Plus)
        case "-":
            tokens.append(.Minus)
        default:
            //smth unexpected - need to send back an error
            print("ends...")
        }
}

print(tokens)

但是这些值添加了前缀,看起来像指针。上面代码的结果是:

[__lldb_expr_14.Token.Number(1), __lldb_expr_14.Token.Minus, __lldb_expr_14.Token.Number(3), __lldb_expr_14.Token.Plus, __lldb_expr_14.Token.Number(9)]

如何读取此前缀,以便生成的数组显示为:

[Token.Number(1), Token.Minus, Token.Number(3), Token.Plus, Token.Number(9)]

为什么要添加这些前缀?

1 个答案:

答案 0 :(得分:1)

这是因为您的Token类型未实现CustomStringConvertible。你应该实现它。

enum Token : CustomStringConvertible {
    case Number(Int)
    case Minus
    case Plus

    var description: String {
        // return a string that describes "self"
    }
}

实现这一目标的一种可能方法是:

var description: String {
    switch self {
        case .Number(let x): return "Number(\(x))"
        case .Minus: return "Minus"
        case .Plus: return "Plus"
    }
}

另请注意,枚举案例应位于camelCase而不是PascalCase