[swift] IGListKit에서 셀 구성하는 방법

IGListKit은 iOS 애플리케이션에서 복잡한 셀들을 구성하는 데 도움을 주는 강력한 라이브러리입니다. IGListKit을 사용하여 셀을 구성하는 방법을 소개하겠습니다.

1. IGListSectionController 생성

먼저, IGListSectionController 클래스를 상속하는 새로운 클래스를 생성해야 합니다. 이 클래스는 섹션의 동작 및 셀의 구성을 담당합니다.

import IGListKit

class MySectionController: IGListSectionController {
    var data: YourDataType?

    // 섹션의 데이터를 설정하는 메서드
    override func didUpdate(to object: Any) {
        if let data = object as? YourDataType {
            self.data = data
        }
    }
    
    // 섹션의 총 아이템 개수를 반환하는 메서드
    override func numberOfItems() -> Int {
        return 1
    }

    // 셀을 반환하는 메서드
    override func cellForItem(at index: Int) -> UICollectionViewCell {
        // 셀을 가져오기 위해 dequeue 로직을 구현합니다.
        let cell = collectionContext?.dequeueReusableCell(of: MyCell.self, for: self, at: index) as! MyCell
        
        // 셀에 데이터를 설정합니다.
        cell.configure(with: data)
        
        return cell
    }
}

2. 셀 데이터 모델 생성

다음으로, 셀에 표시될 데이터 모델을 정의해야 합니다. 이 모델은 IGListDiffable 프로토콜을 준수해야 합니다.

import IGListKit

class YourDataType: NSObject, IGListDiffable {
    let id: String
    let name: String
    
    init(id: String, name: String) {
        self.id = id
        self.name = name
    }

    // IGListDiffable 프로토콜 메서드 구현
    func diffIdentifier() -> NSObjectProtocol {
        return id as NSObjectProtocol
    }
    
    func isEqual(toDiffableObject object: IGListDiffable?) -> Bool {
        guard let object = object as? YourDataType else { return false }
        return id == object.id
    }
}

3. 리스트 컨트롤러에 섹션 컨트롤러 등록

마지막으로, 리스트 컨트롤러(IGListViewController 혹은 IGListCollectionViewController)에 섹션 컨트롤러를 등록해야 합니다. 이를 위해 IGListAdapter를 사용합니다.

import IGListKit

class MyViewController: UIViewController {
    let adapter = IGListAdapter(updater: IGListAdapterUpdater(), viewController: self, workingRangeSize: 0)

    override func viewDidLoad() {
        super.viewDidLoad()
        
        adapter.collectionView = collectionView
        adapter.dataSource = self
    }
}

// IGListAdapterDataSource 프로토콜 구현
extension MyViewController: IGListAdapterDataSource {
    func objects(for listAdapter: IGListAdapter) -> [IGListDiffable] {
        // 데이터 모델을 반환합니다.
        return [YourDataType(id: "1", name: "John"), YourDataType(id: "2", name: "Jane")]
    }
    
    func listAdapter(_ listAdapter: IGListAdapter, sectionControllerFor object: Any) -> IGListSectionController {
        // 섹션 컨트롤러를 생성하여 반환합니다.
        return MySectionController()
    }
    
    func emptyView(for listAdapter: IGListAdapter) -> UIView? {
        return nil
    }
}

위의 예제에서는 objects(for:) 메서드에서 데이터를 반환하고, listAdapter(_:sectionControllerFor:) 메서드에서 섹션 컨트롤러를 생성하여 반환합니다. 이렇게 등록된 섹션 컨트롤러는 cellForItem(at:) 메서드를 통해 셀을 구성하고, 데이터 모델을 셀에 전달할 수 있습니다.

IGListKit을 사용하여 셀을 구성하는 방법을 알아보았습니다. IGListKit은 복잡한 셀 구성을 단순화하고, 성능 향상을 위한 기능들을 제공하여 iOS 애플리케이션의 리스트 기능을 개발하는 데 큰 도움이 됩니다.

참고 자료