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!))"
}
}
上記のような感じでCustomStringConvertibleはprotocolなので継承して使います。protocolの中にdescriptionを持っていますのでそれを利用します。
let novel1 = Novel(_author: "George Orwell", _kana: "ジョージ・オーウェル")
print(novel1)
上記コードを実行するとdescriptionが呼ばれ「“George Orwell(ジョージ・オーウェル)\n”」が出力されました。下記コードのようにCustomStringConvertibleはstructでも利用できます。
struct Novel : CustomStringConvertible {
var author: String!
var description: String {
return self.author
}
}
let Novel2 = Novel(author: "James Patrick Hogan")
print(Novel2)