Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 526 - Swiftでデザインパターン: Memento(メメント) 3

メメントの勉強しています。

www.raywenderlich.com

またまたメメントで手こずってます。NSUserDefaultsも考えて見ればメメント・パターンでいいのかもしれません。そしてiOSフレームワークメメントと言えば、NSCodingのようです。

今まで理解しようとして理解できなかったことがすべてデザイン・パターンだったということを改めて知って感慨深く思っています。

yataiblue.hatenablog.com

自分の記事をみながらNSCodingの復習をします。

NSCodingを実装するために必要なこと。

NSCodingプロトコールに準拠させるためにNSObjectを継承

NSCodingを組み込むクラスはAlbumクラスです。したがってAlbumクラス宣言を変更します。

class Album: NSObject, NSCoding {
...

NSCodingプロトコールで必要な2つのメソッド

  1. func encodeWithCoder(aCoder: NSCoder)
  2. init(coder aDecoder: NSCoder)

ぞれぞれをコーディングしていきます。

 func encodeWithCoder(aCoder: NSCoder) {
   aCoder.encodeObject(title, forKey: "title")
   aCoder.encodeObject(artist, forKey: "artist")
    aCoder.encodeObject(genre, forKey: "genre")
    aCoder.encodeObject(coverUrl, forKey: "cover_url")
    aCoder.encodeObject(year, forKey: "year")
}

そしてイニシャライザの実装です。この説明も上のリンクでしています。

required convenience init?(coder aDecoder: NSCoder) {
 let title = aDecoder.decodeObjectForKey("title") as! String
 let artist = aDecoder.decodeObjectForKey("artist") as! String
 let genre = aDecoder.decodeObjectForKey("genre") as! String
 let coverUrl = aDecoder.decodeObjectForKey("cover_url") as! String
 let year = aDecoder.decodeObjectForKey("year") as! String
 self.init(title: title, artist: artist, genre: genre, coverUrl: coverUrl, year: year)
}

これで完了です。

今日はここまで。