iOSアプリのAdapterパターン

最近iOSアプリを作ってて
Adapterパターンってなんだっけ?って思ったのでメモ

iOSアプリを作ってるとよくdelegateというプロパティ名が出てきます。
と、ここまで書いたところでわかりやすい記事をいくつか見つけましたが続けます。
http://www.gadgety.net/shin/tips/mac/ios_delegate.html
http://supportdoc.net/support-iphone/send_data_2_1.html

そもそもAdapterパターンってなんだっけ

よくある説明はwikipediaとか見てもらうとして、
以下の様な社長クラスを考えます。

class Boss
  #コンストラクタ
  def initialize
  end

  #資料のコピーを取るメソッド
  def copyPrint
    #紙を持ってプリンタの前まで行く
    #プリンタの電源を付ける
    #資料を置いてコピーボタンを押す
    #原本とコピーを取り出す
  end
end

このようなクラスを作れば、社長にコピーを頼むときは

boss = Boss.new
boss.copyPrint

のように書けます。
ただ、資料のコピーをとるのは社長の仕事ではないです。
こんな雑用は秘書にやらせたいです。
上のクラスを↓のように書き換えます。

class Boss
  #コンストラクタ
  def initialize hisho
     @hisho = hisho
  end

  #資料のコピーを取るメソッド
  def copyPrint
     @hisho.copyPrint
  end
end 

このようにクラスを書き換えれば、

boss = Boss.new hishoA
boss.copyPrint

のように書け、社長に資料のコピーを頼んでいるのに、
実際には秘書Aに資料のコピーを頼んだのと同じ結果になります。
こうすることの利点は
・boss.copyPrintという呼び方は変えずに
・Bossクラスに手を加えずに
外から社長の振る舞いを変更出来るということです。
秘書Aの仕事が遅い時はどうすればよいでしょうか。
そんな時は新たに秘書Bを雇い(作成して)
資料のコピーの仕方を教えて(copyPrintを実装して)
下記のように書けばいいだけです。

boss = Boss.new hishoB
boss.copyPrint

このように、Bossクラスには全く手を加えずに、
Bossクラスの実装を入れ替えることが出来ました。

iOSアプリのAdapterパターン

iOSアプリでは、Viewがどのように動くかを決定するために、
delegateプロパティに値をセットする必要があります。
社長クラスのhisho的なやつです。
ここにコールバックをまとめたクラスをセットして上げることで、
ボタンがタップされた時どうするか、キャンセルボタンが押された時どうするか
といった振る舞いを、動的に変更することができてるみたいです。


噂のRubyMotionで書いてるんですが、これがかなり楽しい・・・
iOSアプリ作ってみたいけどObjective-Cはちょっと・・・という方におすすめです。

環境設定

トラックパッド>スクロールとズーム

  • 「スクロールの方向;ナチュラル」のチェックを外す

トラックパッド>その他のジェスチャ

  • 「アプリケーションExpose」をチェック「3本指で下にスワイプ」

キーボード>キーボード

  • キーのリピート、リピート入力認識までの時間を最速
  • 「F1、F2などのすべてのキーを」をチェック

キーボード>キーボードショートカット

  • Spotlight>Spotlight検索フィールドを表示をCmd+Space
  • キーボードと文字入力>前の入力ソースを選択のチェックを外す
  • Dock>画面上の位置→右
  • Dockを自動的に隠す/表示にチェック