Swift インスタンスのテキスト表現 CustomStringConvertible

Pocket

Swiftでクラスなどのインスタンスをprint()した場合、その中身がなにであるのかを確認できません。(lldbでpoすればいいのだけなんですが。。。)そのような場合CustomStringConvertibleというprotocolを使えばカスタマイズした文字をprint()などに表示できます。

class Novel : CustomStringConvertible{
    var author: String!
    var kana: String!
    init(_author: String, _kana: String) {
        self.author = _author
        self.kana = _kana
    }
    var description: String {
        return "\(self.author!)\(self.kana!))"
    }
}

上記のような感じでCustomStringConvertibleprotocolなので継承して使います。protocolの中にdescriptionを持っていますのでそれを利用します。

let novel1 = Novel(_author: "George Orwell", _kana: "ジョージ・オーウェル")
print(novel1)

上記コードを実行するとdescriptionが呼ばれ「“George Orwell(ジョージ・オーウェル)\n”」が出力されました。下記コードのようにCustomStringConvertiblestructでも利用できます。

struct Novel : CustomStringConvertible {
    var author: String!
    var description: String {
        return self.author
    }
}

let Novel2 = Novel(author: "James Patrick Hogan")
print(Novel2)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA