URL 로 UIImage 생성하기(with Combine)

준우·2024년 5월 4일
0

Swift 이야기

목록 보기
16/19
post-thumbnail

이미지 URL 주소를 Combine 을 사용하여 UIImage 로 바꿀 수 있습니다.

  • removingPercentEncoding : "%2F"와 같이 기입되어 있는 문자를 "/" 와 같이 평문으로 바꿔줍니다.
  • addingPercentEncoding : 주소에 한글이 들어가 있을 수도 있어 인코딩 해줍니다.

private func requestImageView(with urlStr: String) -> AnyPublisher<UIImage, Error> {
        guard let urlDecStr = urlStr.removingPercentEncoding,
              let urlEncStr = urlDecStr.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed),
              let url = URL(string: urlEncStr)
        else {
            return Fail(error: URLError(.badURL)).eraseToAnyPublisher()
        } // Optional Biding 처리 || 에러 발생 하면 알림

        return URLSession.shared.dataTaskPublisher(for: url)
            .tryMap { element -> UIImage in
                guard let httpResponse = element.response as? HTTPURLResponse,
                      httpResponse.statusCode == 200
                else {
                    throw URLError(.badServerResponse)
                }
                guard let image = UIImage(data: element.data) else {
                    throw URLError(.cannotDecodeContentData)
                }
                return image
            }
            .receive(on: RunLoop.main)
            .eraseToAnyPublisher()
    }

0개의 댓글