[iOS] 오늘의 리팩토링

중복된 메소드 호출1

updateValue(channel:,type:) 메소드의 호출이 didSelectItemAtupdateModelData 모두에서 사용되어 updateModelData를 호출하는 것으로 변경

변경전

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    tcLevelGroupdInstance.updateValue(channel: indexPath.row, type: .isSelected) {
        collectionView.reloadData()
    }
}

extension TCSetViewController: UpdatableDataDelegate {
    func updateModelData<ItemType>(channel: Int, valueType: ItemType) {
        guard let type = valueType as? ValueType else { return }
        switch type {
        case .tLevel(_),.cLevel(_),.prove(_), .selectThumb(_), .unSelected:
            tcLevelGroupdInstance.updateValue(channel: channel, type: type)
        case .isSelected:
            self.tcLevelGroupdInstance.updateValue(channel: channel, type: type) { [weak self] in
                self?.collectionView.reloadData()
            }
        case  .availableChannel:
            tcLevelGroupdInstance.updateValue(channel: channel, type: type){ [weak self] in
                self?.collectionView.reloadData()
            }
        }
    }
}

변경후

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    updateModelData(channel: indexPath.row, valueType: ValueType.isSelected)
}

중복된 메소드 호출2

updateModelData 에서 case .isSelectedcase .availableChannel이 같은 코드를 사용하므로 하나로 묶음

extension TCSetViewController: UpdatableDataDelegate {
    func updateModelData<ItemType>(channel: Int, valueType: ItemType) {
        guard let type = valueType as? ValueType else { return }
        switch type {
        case .tLevel(_),.cLevel(_),.prove(_), .selectThumb(_), .unSelected:
            tcLevelGroupdInstance.updateValue(channel: channel, type: type)
        case .isSelected, .availableChannel:
            tcLevelGroupdInstance.updateValue(channel: channel, type: type) { [weak self] in
                self?.collectionView.reloadData()
            }
        }
    }
}

중복된 프로퍼티 사용

didSelectItemAt에 메소드 호출을 추가하였는데 무심결에 indexPath.row를 똑같이 2번 사용함 그래서 let channel 상수를 사용하여 타이핑을 최소화?하고 좀더 이뻐보이게 변경

변경전

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {    
    updateModelData(channel: indexPath.row, valueType: ValueType.isSelected)
    updateModelData(channel: indexPath.row, valueType: ValueType.selectThumb(thumb: 0))
}

변경후

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let channel = indexPath.row
    updateModelData(channel: channel, valueType: ValueType.isSelected)
    updateModelData(channel: channel, valueType: ValueType.selectThumb(thumb: 0))
}

updateModelData의 인자타입을 배열로 변경해서

updateModelData(channel: channel, valueType: [ValueType.isSelected,
                                                ValueType.selectThumb(thumb: 0)])

이렇게 합처버릴까도 생각해봤지만, 그래도 개인적으로는 2줄을 나란히 작성하는게 더 눈에 익어서 수정은 추후에 다시 생각해 보기로 함

댓글남기기