はじめに
どうも、はじめです。
今回はSectionやCellの指定にSwitchとEnumを使ってみようと思います。
SwitchとEnumを使用するメリットとしてはEnumのすべてのCaseを網羅していないとエラーになってしまうため
漏れが無くなるところにあります。
複数人で開発をしている時などにとても便利ですね。
今回は例としてCellのTitleをEnumのCase毎に変更してみようと思います。
実行結果は以下のようになります。
では早速。
環境
・Xcode 8.3.3
・Swift 3
Enumの用意
まずは使用するEnumを用意します。
1 2 3 4 5 | enumEnumCells: Int{ casefirstCell=0 casesecondCell casethirdCell } |
上記のままだとCell数を返す時のcountが返せません。
調べてみてもあまり気持ちい書き方が見当たらずもやもやするところもありますが、
以下を追記することでcountを返すことができます。
1 | staticvarcount: Int{returnEnumCells.thirdCell.rawValue+1} |
Tableの用意
通常通りTableの用意をしておきます。
1. StoryBoard上でTableViewを追加し、delegateとdatasourceを設定
2. ViewControllerにUITableViewDelegateとUITableViewDataSourceを継承させる
3. UITableViewDataSourceの実装必須メソッドを追記
Cellの返却にEnumを使用する
さて、ようやく本題に来ました。
まずはCell数を返します。
Enumの用意の際にEnumのCaseの数を取得できるようにしていたので
以下を記述するだけでCaseの数を取得することができます。
1 | EnumCells.count |
次にEnumのCase毎にCellのTitleを変更させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | functableView(_tableView:UITableView,cellForRowAt indexPath:IndexPath)->UITableViewCell{ vartitleText="" letenumCell=EnumCells(rawValue:indexPath.row) switch(enumCell)!{ case.firstCell: titleText="FirstCell" case.secondCell: titleText="SecondCell" case.thirdCell: titleText="ThirdCell" } letcell=UITableViewCell() cell.textLabel?.text=titleText returncell } |
ここで使用するCaseにEnumのすべてのCaseが使用されていなければエラーとなります。
また、SwitchにEnumを使用することでDefaultを記述する必要がなくなります。
こうすることによって網羅していなければいけない箇所でも漏れがなくなります。
以上で完成です。
完成後のソース全量を表示しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | importUIKit classViewController:UIViewController,UITableViewDelegate,UITableViewDataSource{ enumEnumCells: Int{ casefirstCell=0 casesecondCell casethirdCell staticvarcount: Int{returnEnumCells.thirdCell.rawValue+1} } overridefuncviewDidLoad(){ super.viewDidLoad() } overridefuncdidReceiveMemoryWarning(){ super.didReceiveMemoryWarning() } functableView(_tableView:UITableView,numberOfRowsInSection section:Int)->Int{ returnEnumCells.count } functableView(_tableView:UITableView,cellForRowAt indexPath:IndexPath)->UITableViewCell{ vartitleText="" letenumCell=EnumCells(rawValue:indexPath.row) switch(enumCell)!{ case.firstCell: titleText="FirstCell" case.secondCell: titleText="SecondCell" case.thirdCell: titleText="ThirdCell" } letcell=UITableViewCell() cell.textLabel?.text=titleText returncell } } |
さいごに
SwitchとEnumの組み合わせは他にもいろいろな場所で利用できると思います。
今回はCellに使用しましたが、TableやCollectionだけでもSectionに使用したり
HeightやLayoutの変更に使用したりとかなり便利だと思います。
最後まで見ていただきありがとうございました。