11

Swift 2.0 では、そのオブジェクトで print が呼び出されるたびにクラスに変数をDigit表示させようとしています。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
  }
}
4

1 に答える 1

18

description変数を追加するだけでは不十分です。また、クラスが準拠していることを述べる必要があります(以前の Swift バージョンでは以前はそうCustomStringConvertible呼ばれていました)。Printable

コマンドをクリックするprintと、次の説明が表示されます。

のテキスト表現valueとオプションの改行を標準出力に書き込みます。

テキスト表現はvalue、プロトコルの適合性を使用して、 、 、 の順にStreamable取得 CustomStringConvertibleされますCustomDebugStringConvertible。これらの準拠が見つからない場合、型の種類と構造に基づいて、実装定義の方法でデフォルトのテキスト表現が構築されます。

ここで重要なのは、渡されたオブジェクトがメソッド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
    }
}
于 2015-06-17T15:58:52.747 に答える