今回のテーマは、少し取り上げにくい。なんとか頑張ってみる。
カスタムセルの実装をMVVM (Model - View - ViewModel)でと説明されているが、ここがスムーズにいかない。
MVVMは、Microsoftの.Netフレームワーク側のWPF(Windows Presentation Foundation)やSilverlightの設計方法で、WindowsのXAMLでViewを構成する場合にあったやり方。なので、異なるフレームワークのCocoaでもあるし、MVCやモジュール化、関数化の流れの物だと思うので、わざわざ、Cocoaの世界でMVVMというのは。
MVVM化として説明されているのが、セルに値を設定するメソッド。
class CardCell: UITableViewCell {
@IBOutlet var titleLabel: UILabel?
public func fillWith(card: Card) {
titleLabel?.text = card.title
}
}
セルの設定でビューコントローラのプロパティを使うのを避けたいという事のようだが、自分の場合は、Model(Dataコントローラ)を用意しているので、ちょっと状況が異なる。
これ以外に、自分の知らなかった、役立つ手法が紹介されていた。
先ずは、guard let。
guard 条件節 else { /* breakやreturn */ }
func demo() -> Cell {
guard let cell = crateCell else {
fatalError("Could not create cell")
}
cell.setTitle("表題")
return cell
}
Eiffel言語の事前条件のような利用を想定しているようで、ブロックの頭で、条件に合わない場合は弾く処理を記述するようの構文のようだ。
次は、subscript。
class Hand {
private var cards = [Card]()
subscript(index: Int) -> Card {
return cards[index]
}
}
var card = Hand[0]
配列は辞書の添字の多重定義、といったところか。例の場合は分かりにくくなっているが、C言語のマクロで簡素化していたコードなどをこれで置き換えることができそうだ。
ソースコード
GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/Hand - GitHub
関連情報
文化を調和させる
【Cocoa練習帳】
http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)