我正在尝试解析字符串并将它们保存到数组中:
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)]
为什么要添加这些前缀?
答案 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
。