代码之家  ›  专栏  ›  技术社区  ›  roman_ds

为什么将对象指针前缀添加到值中?(Swift 4)

  •  1
  • roman_ds  · 技术社区  · 8 年前

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

    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 回复  |  直到 8 年前
        1
  •  1
  •   Sweeper    8 年前

    发生这种情况是因为 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