훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-29 00:58

티스토리

hELLO · Designed By 정상우.
훌이

후리스콜링개발

[Swift] ReusableViewProtocol로 뷰컨/셀 식별자 사용하기
⭐️ 개발/iOS & Swift

[Swift] ReusableViewProtocol로 뷰컨/셀 식별자 사용하기

2022. 8. 2. 15:27
728x90
반응형

기존에 tableViewCell이나 collectionViewCell의 reuseIdentifier를 사용하기 위해서는 문자열을 통해 접근해야 했다.

그렇다보니 발생하는 문제점은 휴먼에러.. 그니까 오타..!로 인해 찾지 못한다는 점


1. 타입 프로퍼티 각 클래스 파일에 작성하기

각 클래스마다 타입 프로퍼티를 만들어서 초기에 인스턴스를 생성해서 접근했다.

매번 클래스 만들 때마다 작성해줘야 하는 것과 각 클래스 파일에

들어가서 하나하나 체크해줘야 하는 게 번거롭다.

 


2. Constant 구조체 내에 모든 클래스의 타입 프로퍼티 모아두기

두 번째 방법으로는 Constant라는 구조체 파일에 모든 클래스의 타입 프로퍼티를 작성해서 접근하는 방식으로 만들어줬다.

이 방식의 장점은 모든 클래스들의 identifier가 모아져있어서 변경할 때 편리하다는 점

근데 단점은 결국 이 아이도 문자열을 작성해줘야 하는 것


3. ReusableViewProtocol

 

String(describing: 클래스명.self)

모든 타입의 인스턴스를 문자열로 변환해줌

// WebViewController.self 메타 타입 => "WebViewController"
static var reuseIdentifier: String = String(describing: WebViewController.self)

클래스의 경우 self를 꼭 붙여서 가능하다.

 


protocol ReusableViewProtocol {
    static var reuseIdentifier: String { get }
}

 

ReusableViewProtocol을 하나 만들어서 각 클래스마다 채택하고 프로토콜 프로퍼티를 구현해줄 수도 있지만

같은 기능을 하는 경우라면 extension을 통해 초기 정의를 해줄 수 있다.

 

extension UIViewController: ReusableViewProtocol {
    static var identifier: String {
        get {
            return String(describing: self)
        }
    }
}

extension 내에서는 저장 프로퍼티가 불가능하기 때문에 연산 프로퍼티 형식으로 작성한다.

그리고 get만 하나 구현해주는 경우라면 생략이 가능하기 때문에 아래와 같이 작성해줘도 무방하다.

 

extension UIViewController: ReusableViewProtocol {
    static var identifier: String {
         return String(describing: self)
    }
}

 

이런 식으로 구현 시에 결과적으로 UIViewController를 상속받고 있는 모든 클래스에서 따로 해당 코드를 작성하지 않더라도

아래처럼 작성할 수 있게 된다.

 

 

 


UITableViewCell의 경우도 마찬가지다.

protocol ReusableViewProtocol {
    static var identifier: String { get }
}

extension UITableViewCell: ReusableViewProtocol {
    static var identifier: String {
        return String(describing: self)
    }
}

 

 

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글

[iOS] Alamofire, SwiftyJSON을 사용해서 HTTP 통신하기  (0) 2022.08.02
[Swift] Singleton Pattern  (0) 2022.08.02
[Swift] Class와 Struct 그리고 부스러기 개념들  (0) 2022.07.29
[Swift] 스위프트 성능 이해하기1 - Struct / Class  (0) 2022.07.29
[iOS] DataSource, Delegate | TextView Placeholder | WebKit  (0) 2022.07.29
    '⭐️ 개발/iOS & Swift' 카테고리의 다른 글
    • [iOS] Alamofire, SwiftyJSON을 사용해서 HTTP 통신하기
    • [Swift] Singleton Pattern
    • [Swift] Class와 Struct 그리고 부스러기 개념들
    • [Swift] 스위프트 성능 이해하기1 - Struct / Class
    훌이
    훌이

    티스토리툴바