Swiftで遊ぼう! - 527 - Swiftでデザインパターン: Memento(メメント) 4
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
メメントの勉強がまだまだ続いています。
Albumクラスのデータを保存するPersistencyManagerクラスに保存機能としてsaveAlbumsメソッドを加えます。
func saveAlbums() { let filename = NSHomeDirectory().stringByAppendingString("/Documents/albums.bin") let data = NSKeyedArchiver.archivedDataWithRootObject(albums) data.writeToFile(filename, atomically: true) }
これに加えてPersistencyManagerクラスのイニシャライザを変更します。
override init() { super.init() if let data = NSData(contentsOfFile: NSHomeDirectory().stringByAppendingString("/Documents/albums.bin")) { let unarchiveAlbums = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! [Album]? if let unwrppedAlbum = unarchiveAlbums { albums = unwrppedAlbum } } else { craatePlaceholderALbum() } } func craatePlaceholderALbum() { //Dummy list of albums let album1 = Album(title: "Let's Dance", artist: "David Bowie", genre: "Pop", coverUrl: "https://s3.amazonaws.com/CoverProject/album/album_david_bowie_lets_dance.png", year: "1980") let album2 = Album(title: "These Days", artist: "Bon Jovi", genre: "Pop", coverUrl: "https://s3.amazonaws.com/CoverProject/album/album_bon_jovi_these_days.png", year: "1994") let album3 = Album(title: "The Dream of the Blue Turtles", artist: "Sting", genre: "Pop", coverUrl: "https://s3.amazonaws.com/CoverProject/album/album_sting_dream_of_the_blue_turtles.png", year: "1985") let album4 = Album(title: "Rattle and Hum", artist: "U2", genre: "Pop", coverUrl: "https://s3.amazonaws.com/CoverProject/album/album_u2_rattle_and_hum.png", year: "1990") let album5 = Album(title: "Something to Remember", artist: "Madonna", genre: "Pop", coverUrl: "https://s3.amazonaws.com/CoverProject/album/album_madonna_something_to_remember.png", year: "2002") albums = [album1!, album2!, album3!, album4!, album5!] saveAlbums() }
そしてファサード・モデルでAPIをLibrarryAPIクラスでメソッドをコントロールしているのでLibraryAPIクラスに次のメソッドを組み込みます。
func saveAlbums() { persistencyManager.saveAlbums() }
したがってpersistencyManagerのメソッドは直接使わず必ずLibraryAPIを介して利用するようにします。ViewControllerクラスのsaveCurrentState()メソッドに次のコードを加えます。
LibraryAPI.sharedInstance.saveAlbums()
これで完了です。
今日はここまで。