トップ «前の日記(2016-12-09) 最新 次の日記(2016-12-12)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|

2016-12-10 [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/(ミラー・サイト)

トップ «前の日記(2016-12-09) 最新 次の日記(2016-12-12)» 編集