Swiftで遊ぼう! on Hatena

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

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

デザイン・パターンとは、OOP(オブジェクト指向プログラミング)作法でアプリケーション開発をする場合、再利用できるコーディングを23パターンにまとめたものです。初心者はプログラミングをする場合、この23パターンを熟知することがOOPプログラミング達人への近道になると信じています。

今日まで取り組んでいたデザイン・パターンプロジェクト

www.raywenderlich.com

最後のメソッドをコーディングして一旦終了にします。

最後のメソッドはすべてViewControllerに加える3つのメソッドです。アルバムを「add」「delete」そして「undo」です。

まずアルバムデータを加えます。ファサード・パターンでシングルトン・パターンのインスタンスでアルバム管理はしています。詳しい説明は省きます。

func addAlbumAtIndex(album: Album,index: Int) {
 LibraryAPI.sharedInstance.addAlbum(album, index: index)
 currentAlbumIndex = index
 reloadScroller()
}

次はアルバムを削除するメソッドです。コードは読めますが、自分でこのコードを書くことができません。何度か繰り返して自分でコーディングする練習をしないといけませんね。

func deleteAlbum() {
 let deletedAlbum : Album = allAlbums[currentAlbumIndex]
 let undoAction = (deletedAlbum, currentAlbumIndex)
 undoStack.insert(undoAction, atIndex: 0)
 LibraryAPI.sharedInstance.deleteAlbum(currentAlbumIndex)
 reloadScroller()
 let barButtonItems = (toolbar.items! as [UIBarButtonItem])
 let undoButton : UIBarButtonItem = barButtonItems[0]
 undoButton.enabled = true
 if (allAlbums.count == 0) {
  let trashButton : UIBarButtonItem = barButtonItems[2]
  trashButton.enabled = false
 }
}

そしてやり直しのメソッド

func undoAction() {
 let barButtonItems = toolbar.items! as [UIBarButtonItem]
 if undoStack.count > 0 {
  let (deletedAlbum, index) = undoStack.removeAtIndex(0)
  addAlbumAtIndex(deletedAlbum, index: index)
 }
 if undoStack.count == 0 {
  let undoButton : UIBarButtonItem = barButtonItems[0]
  undoButton.enabled = false
 }
 let trashButton : UIBarButtonItem = barButtonItems[2]
 trashButton.enabled = true
}

これで全てのコーディングが終わりました。これでランさせるとちゃんと動きます。「ゴミ箱」ボタンをクリックすると選択したアルバムが消えて、「undo」ボタンを押すと元に戻ります! ちょっと感動しますね。

f:id:yataiblue:20151221163600j:plain

これでデザイン・パターンのチュートリアルが終了です。しかし、このチュートリアルで学んだパターンは、Singleton、MVC、Delegation、Protocols、Facade、Observer、Mementoで、ごく一部です。まだ残りのデザインパターンを勉強する必要がありますが、しばらく別のチュートリアルで他のiOSフレームワークの勉強をします。

デザイン・パターンの勉強は深みがあるので面白いですね。

今日はここまで。