---
# System prepended metadata

title: OpenMarket Step2 PR

---

# OpenMarket Step2 PR

쿠마 안녕하세요! 🤩
조금 늦은 Step2 PR을 보냅니다



## 궁금증/고민

### 1. Infinite Scrolling 적용 후 추가 로딩할 때 이미지가 깜빡이는 문제
`collectionView(_:willDisplay:forItemAt:)` 에서 데이터를 더 받아오는 메서드 `loadMoreData(indexPath:)`를 호출하여 무한 스크롤을 구현했습니다. 
```swift
// collectionView(_:willDisplay:forItemAt:)
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    guard let itemsCount = items?.count else { return }
    
    if indexPath.row == itemsCount - 4 && self.isNotLoading {
        loadMoreData(indexPath: indexPath)
    }
}

// loadMoreData(indexPath:) 일부
manager.fetchData(url: url) { (result: Result<Page, Error>) in
    switch result {
    case .success(let decodedData):
        self.items?.append(contentsOf: decodedData.items)
        DispatchQueue.main.async {
            self.collectionView.reloadItems(at: [indexPath])
            self.isNotLoading = true
        }
    case .failure(let error):
        print(error)
    }
}

```
원래 `reloadItems(at:)` 대신 `reloadData()`를 사용했었는데요, 스크롤을 할 때 로딩이 완료될때마다 컬렉션 뷰의 이미지가 전체적으로 한번 깜빡이는 현상이 있었습니다. 그래서 `reloadItems(at:)` 메서드로 바꿔봤는데 깜빡이는 현상이 그대로 있어서 해결이 되지 않았습니다. 

PR을 보내놓고 data prefetching을 공부해서 적용해보려고 하는데 prefetching 외에 다른 좋은 방법이 있을까요? 



### 2. UILabel.attributedText 초기화
`priceLabel` 이라는 UILabel에 attributedText를 적용했는데 상황에 따라 제대로 초기화되지 않는 문제가 발생했습니다. 확인해보니 priceLabel에 text를 지정해주는 순서에 따라 초기화가 되기도 하고 안 되기도 합니다.
(priceLabel은 default가 회색글씨입니다. 하지만 discountedPrice가 있으면 빨간색+strikeThrough 속성이 적용됩니다)

>편의상 원래는 여러 메서드와 prepareForReuse()에 분리되어 있는 코드를 한 곳에 모았습니다.

#### 초기화가 잘 되는 코드
다음 코드는 속성이 제대로 초기화됩니다. discountedPrice가 없는 경우 priceLabel은 회색 글씨로 잘 나타납니다. 여러 차례 dequeue해도 셀의 이전 속성에 영향을 받지 않습니다.

```swift
self.priceLabel.attributedText = nil
 
self.priceLabel.text = "새로운값"
       
if let _ = item.discountedPrice {
    let attributes: [NSAttributedString.Key: Any] = [
        .foregroundColor: UIColor.red,
        .strikethroughStyle: true
    ]
    self.priceLabel.attributedText = NSAttributedString(string: "attributed값", attributes: attributes)
}
```

#### 초기화가 잘 안되는 코드
하지만 priceLabel의 텍스트를 if구문 다음에서 지정해주면 문제가 발생합니다. dequeue한 몇몇 셀들의 텍스트는 빨간색 + strikeThrough 속성이 지워지지 않은 채로 화면에 표시됩니다. 첫 줄에서 셀의 이전 속성을 nil로 초기화를 하는데도 왜 이런 문제가 발생하는지 잘 이해가 가지 않습니다. 🤯

```swift
self.priceLabel.attributedText = nil
        
if let _ = item.discountedPrice {
    let attributes: [NSAttributedString.Key: Any] = [
        .foregroundColor: UIColor.red,
        .strikethroughStyle: true
    ]
    self.priceLabel.attributedText = NSAttributedString(string: "attributed값", attributes: attributes)
}

self.priceLabel.text = "새로운값"
```
