0
4

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.

UITableviewにCaseiterableとCustomStringConvertibleを使ってみる

Last updated at Posted at 2019-04-29

iOSエンジニアとして就職してから半年が経ちました、Swiftを初心者が半年間触って、とても便利に感じた一つの機能がProtocolです。
いくつもあるProtocolのなかで自分が特に便利に感じたものを紹介できたらと思いました

##Protocolとは
・class、struct、enumに実装できる
・複数のprotocolを1つのclassへ実装できる
・処理を実装先で定義できるため、後からの変更が容易
・身近な例だとUITableViewDelegateやUITableViewDatasourceなど

###定義

protocol ConvenienceProtocol{
    func convenienceFunc()
}

###実装

class ConvClass: ConvenienceProtocol{
    func convenienceFunc(){
        //実態は実装先で定義する
    }
}

#UITableviewにCaseiterableとCustomStringConvertibleを使ってみる

import UIKit

class TableViewController: UITableViewController{

    enum AnimalCellRows:Int, CustomStringConvertible, CaseIterable{
	    case nekochan 
	    case dog
	    case bird
		
	    var description: String {
		    switch self {
		    case .nekochan:	    return "nekochan"
		    case .dog: 			return "dog"
		    case .bird:			return "bird"
		    }
        }  
	}

    override func viewDidLoad() {
		super.viewDidLoad()
	}

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
		let cell = UITableViewCell()
		cell.textLabel?.text = {
			switch indexPath.row{
			case AnimalCellRows.nekochan.rawValue:	    return AnimalCellRows.nekochan.description
			case AnimalCellRows.dog.rawValue: 			return AnimalCellRows.dog.description
			case AnimalCellRows.bird.rawValue:			return AnimalCellRows.bird.description
			default: break											 
            }
			return ""
		}()
		return cell
	}

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
		return AnimalCellRows.allCases.count
	}
}

CaseIterableを使うことによってenumのcountを取得できるようになり、CustomStringConvertibleを使うことによりenumの値とは別にtitleを定義できました

#最後に
UITableViewをenumで管理したら便利なのではと思い使っていたのですが、enumだけですとcountが取れなかったり、cellのtextを直接入力しないといけなくて困っていたのですが、CaseiterableとCustomStringConvertibleを知り、変更があってもenum内だけで完結できるようになりました。
画像などを表示したい場合はCustomStringConvertibleをstructに変えて見るといいかもしれません

0
4
4

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
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?