打印变量时出错 lldb_expr

Error lldb_expr when printing a variable

在下面的代码中,因为我在 playground 中打印 "aMovie.moviesGenere" 时出错:

struct Movie: Codable {
    enum MovieGenere: String, Codable {
        case horror, skifi, comedy, adventure, animation
    }

    var name : String
    var moviesGenere : [MovieGenere]
    var rating : Int
}

let aMovie = Movie(name: "Up", moviesGenere: [.comedy , .adventure, .animation], rating : 4)

print(aMovie.moviesGenere)

错误:

[__lldb_expr_98.Movie.MovieGenere.comedy, __lldb_expr_98.Movie.MovieGenere.adventure, __lldb_expr_98.Movie.MovieGenere.animation]

不是错误,是低级调试器以及 Playground 如何打印您的枚举。如果你分解它你会看到:

[
__lldb_expr_98.Movie.MovieGenere.comedy,
__lldb_expr_98.Movie.MovieGenere.adventure,
__lldb_expr_98.Movie.MovieGenere.animation
]

如果您想从控制台输出中删除 __lldb_expr 前缀。那么 struct 必须符合 CustomStringConvertible 协议。这是一个 public 协议,它有一个 var 描述,我们可以在其中提供自定义字符串来显示结构描述。

struct Movie: Codable, CustomStringConvertible {
    enum MovieGenere: String, Codable, CustomStringConvertible {
        var description: String {
            return self.rawValue
        }

        case horror, skifi, comedy, adventure, animation
    }

    var name : String
    var moviesGenere : [MovieGenere]
    var rating : Int

    var description: String {
        return "\(name), \(moviesGenere), \(rating)"
    }
}

let aMovie = Movie(name: "Up", moviesGenere: [.comedy , .adventure, .animation], rating : 4)
print(aMovie)