[Swifty]カスタムセルを作る | Cocoa練習帳

[Swifty]カスタムセルを作る

今回のテーマは、少し取り上げにくい。なんとか頑張ってみる。

カスタムセルの実装を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/(ミラー・サイト)