更改Swift 2.0中显示的print(Object)

时间:2015-06-17 15:32:49

标签: swift printing swift2

我试图让我的类Digit在Swift 2.0中对该对象调用print时显示num变量。我认为这可能是用描述变量完成的,但没有运气。

class Digit {

  var num: Int
  var x: Int
  var y: Int
  var box: Int
  var hintList: [Int] = []
  var guess: Bool = false

  var description: String {
    let string = String(num)
    return string
  }
}

1 个答案:

答案 0 :(得分:15)

仅添加description变量是不够的。您还需要声明您的类符合CustomStringConvertible(以前在Swift版本中称为Printable)。

如果您命令单击print功能,则会找到以下说明。

  

写出value的文字表示和可选的换行符,   进入标准输出。

     

文本表示是使用其协议从value获得的   符合性,按以下优先顺序排列:Streamable,   CustomStringConvertibleCustomDebugStringConvertible。如果没有   找到这些一致性,构造默认文本表示   以实现定义的方式,基于类型种类和结构。

这里重要的部分是传递给print的对象不会检查它们是否有description方法,而是检查是否符合协议比如CustomStringConvertible提供要打印的数据。

话虽如此,在这种情况下您需要做的就是指定您的类符合CustomStringConvertible,因为您已经添加了description变量。如果您尚未添加此内容,编译器会抱怨,因为此协议要求实现description变量。

class Digit: CustomStringConvertible {
    var num: Int
    var x: Int
    var y: Int
    var box: Int
    var hintList: [Int] = []
    var guess: Bool = false

    var description: String {
        let string = String(num)
        return string
    }
}