Swiftで遊ぼう! - 526 - Swiftでデザインパターン: Memento(メメント) 3
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
メメントの勉強しています。
またまたメメントで手こずってます。NSUserDefaultsも考えて見ればメメント・パターンでいいのかもしれません。そしてiOSフレームワークでメメントと言えば、NSCodingのようです。
今まで理解しようとして理解できなかったことがすべてデザイン・パターンだったということを改めて知って感慨深く思っています。
自分の記事をみながらNSCodingの復習をします。
NSCodingを実装するために必要なこと。
NSCodingプロトコールに準拠させるためにNSObjectを継承
NSCodingを組み込むクラスはAlbumクラスです。したがってAlbumクラス宣言を変更します。
class Album: NSObject, NSCoding { ...
NSCodingプロトコールで必要な2つのメソッド
- func encodeWithCoder(aCoder: NSCoder)
- 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) }
これで完了です。
今日はここまで。