1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CocoaAdvent Calendar 2016

Day 10

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

Last updated at Posted at 2016-12-10

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

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?