포스트

프로젝트 2일차

이글을 작성할때는 merge 문제가 이미 해결이 되었던 부분이라 사진이 많이 없어서 회상하는 식으로 작성한다.

Merge 문제 확인

우선 Merge가 안된다고 하여 해당 문제를 해결하려고 한다.

Clean-Shot-2024-04-02-at-17-00-22-2x

역시나 Conflict가 발생했다.

문제는 프로젝트 파일이 실행조차 안되었다.

.xcodeproj 파일을 우클릭 하여 패키지 내용보기를 한다.

Clean-Shot-2024-04-02-at-17-05-28-2x

project.pbxproj 파일을 열어 «< Head == »> 부분을 지운다.

Clean-Shot-2024-04-02-at-17-07-30-2x

그리고 프로젝트가 실행이 되는지 확인해본다.

프로젝트 파일이 충돌이 발생하는 이유는

위치에 새로운 디렉토리가 생기는 즉 내부의 파일이 변동이 되어서 프로젝트 파일을 구성해주는 값이 변화가 생김으로 인한 충돌이다.

위의 파일이 바로 그런것을 코드로 구성해주는 파일이다.

Clean-Shot-2024-04-02-at-14-36-16-2x

여기를 구성해주는 파일이라고 보면 될듯하다.

무튼 해당 문제를 해결하고 머지하여 다시 repository에 올려두었다.

Storyboard역시 내용이 바뀌면 Conflict가 발생하는데, 이부분이 좀 까다로운듯하다.

컬렉션 뷰에서 값이 선택되었을때 테이블뷰에 나타내기.

컬렉션뷰를 담당하시는 팀원분이 코드를 올려주셨던걸 내려 받아 머징 테스트를 하면서, 본의아니게 해당 기능을 구현 할 수 있게 되었다.

처음에는 단순히 이렇게 구현했다.

1
2
3
4
5
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    selectedList.append(filteredProducts[indexPath.item])
    tableView.reloadData()
    getData()
  }

Apr-02-2024-15-16-02

기능구현은 잘 되었다.

하지만 위의 코드에 대해 예외처리를 하지 않고 단순하게 코드를 작성했다는 것을 알았다.

예외처리

해당 코드의 예외란 두번 클릭을 하게되면 아래와 같이 똑같은것이 두번 선택이 된다는 것이다.

Apr-02-2024-17-15-12

처음에는 수량을 올릴까 하다가 그냥 중복된것이 선택 되었다고 alert를 주는게 좋을 것 같아서 alert를 추가했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        
        selectedList.append(filteredProducts[indexPath.item])
        
        if selectedList.map({$0.name}).filter({$0 == filteredProducts[indexPath.item].name}).count == 2 {
            let alert = UIAlertController(title: "중복 선택 확인", message: "중복으로 선택 되었습니다.", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "확인", style: .cancel))
            selectedList.removeLast()
            
            self.present(alert, animated: true)
        }

        tableView.reloadData()
        getData()
    }
    

고차함수를 사용하여, 똑같은 제품명이 2개가 되었을때 즉, 중복된 값이 추가가 되었을때, UIAlertController 객체를 생성하여 경고를 주게하고, 처음에 값을 추가하게 코드가 진행이 되었으므로 중복된 값은 배열의 마지막에 위치함으로 마지막값을 제거하게 하였다.

실행 화면은 다음과 같다.

Apr-02-2024-15-49-21

숫자 1000단위 씩 끊기.

현재 위의 사진에는 이미 처리가 되어있다.

어제 해결했는데 깜빡하고 적질 못했다.

1
2
3
4
5
6
7
8
9
10
let numberFormatter = NumberFormatter()

override func viewDidLoad() {
        super.viewDidLoad()
        
        numberFormatter.numberStyle = .decimal
}

priceLabel.text = "\(numberFormatter.string(from: totalPrice as NSNumber) ?? "0") 원"
countLabel.text = "\(String(totalCount)) 개"

사용한 코드만 따로 빼두었다.

우선 dateFormatter와 비슷하게 숫자도 포맷을 줄수있는 NumberFormatter 객체를 하나 만들고 앱을 시작하자마자 단위를 정하게

viewDidload에 decimal을 쓴다고 정해두자.

그리고 내가 단위로 쓸 label에 위와 같이 표현을 하면 된다.

simulator-screenshot-40405-C7-F-C533-432-C-B714-146694020-B45

4000000원 이 아니라 4,000,000원으로 표시된걸 알수 있다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.