안녕하세요.
오늘은 identifier를 하드코딩 하지 않고 관리하는 법에 대해서 말씀드리겠습니다.
이번에 테이블뷰를 사용하다가 dequeueReusableCell
메서드를 사용할 때 withIdentifier
에 String으로 하드코딩 하는 것이 보기 불편하여 여러가지를 고민했지만 모두 불편한 부분이 있어 찾아보던 중 두가지 방법이 있어 소개드리려고 합니다!!
>먼저 선행되어야할 것은 UI요소에 연결된 뷰컨트롤러의 이름과 UI요소의 identifier을 같게 해야한다는 것입니다!
먼저 extension
으로 관리할 수 있는 방법을 소개드리겠습니다.
아래와 같이 사용할 타입의 extension
을 통해 reuseIdentifier
를 static var로 선언하여 관리할 수 있습니다.
extension UITableViewCell {
static var reuseIdentifier: String {
return String(describing: self)
}
}
아래와 같이 사용하시면 됩니다.
guard let cell = tableView.dequeueReusableCell(withIdentifier: EntryTableViewCell.reuseIdentifier, for: indexPath) as? EntryTableViewCell else {
return UITableViewCell()
}
Protocol로 관리하는 방법도 있습니다.
아래와 같이 Protocol을 만들어 그 안에 reuseIdentifier
를 만들어 줍니다.
Protocol의 기본구현은 extension으로 해야 하므로 extension에 구현하겠습니다.
protocol ReuseIdentifying {
static var reuseIdentifier: String { get }
}
extension ReuseIdentifying {
static var reuseIdentifier: String {
return String(describing: Self.self)
}
}
그리고 사용하는 것은 extension으로 관리하는 것과 같이 사용하시면 됩니다!
guard let cell = tableView.dequeueReusableCell(withIdentifier: EntryTableViewCell.reuseIdentifier, for: indexPath) as? EntryTableViewCell else {
return UITableViewCell()
}