iOS framework
[iOS - swift] Reusable 프레임워크 사용 방법
jake-kim
2021. 12. 10. 01:08
Reusable 프레임워크
- Cell 등록 시 편의성 향상
- 문자열을 입력하지 않고, 클래스만 입력하여type-safe하므로 컴파일 타임에 오류 감지 가능
- Reusable 미적용 - tableView에 cell을 등록하고 cell을 리턴 할 경우
// cell 등록 tableView.register(MyTableViewCell.self, forCellReuseIdentifier: "MyTableViewCell") // dequeue cell let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell", for: indexPath) as! MyTableViewCell - Reusable 적용 - tableView에 cell을 등록하고 cell을 리턴 할 경우
// cell 등록 tableView.register(cellType: MyTableViewCell.self) // dequeue cell let cell = tableView.dequeueReusableCell(for: indexPath) as MyTableViewCell
- Reusable 미적용 - tableView에 cell을 등록하고 cell을 리턴 할 경우
- 문자열로 등록하지 않고 더 간편하며, dequeue cell에서는 강제 unwrapping을 시도하지 않아서 swiftlint에 걸리지 않는 깔끔한 코드
Reusable 사용 방법
- Cell 정의 시 Reusable을 준수
import UIKit import Reusable final class MyTableViewCell: UITableViewCell, Reusable { } - MyTableViewCell 전체 코드
final class MyTableViewCell: UITableViewCell, Reusable { // MARK: Constants private enum Metric { static let separatorHeight = 10.0 static let gradientViewHeight = 200.0 } // MARK: UI private let titleLabel = UILabel().then { $0.textColor = .black $0.font = UIFont.systemFont(ofSize: 15) } // MARK: Initializers override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) addSubviews() makeConstraints() } private func addSubviews() { self.contentView.addSubview(titleLabel) } private func makeConstraints() { self.titleLabel.snp.makeConstraints { $0.centerX.centerY.equalTo(self.contentView) } } func setupLabel(title: String) { titleLabel.text = title } @available(*, unavailable) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemeneted") } } - register
tableView.register(cellType: MyTableViewCell.self) - dequeue
func tableView( _ tableView: UITableView, cellForRowAt indexPath: IndexPath ) -> UITableViewCell { let cell = tableView.dequeueReusableCell(for: indexPath) as MyTableViewCell cell.setupLabel(title: dataSource[indexPath.row]) return cell }

* 전체 소스 코드: https://github.com/JK0369/ExReusable
* 참고