SSUMC-6th / iOS_A

SSUMC 6기 iOS 스터디 A조
0 stars 0 forks source link

[JC] Request code review #26

Closed jayn2u closed 6 months ago

jayn2u commented 6 months ago

코드 리뷰 요청

Code

private func fetchData() {

    guard let hostString = URL(string: "https://dog.ceo/api/breeds/image/random") else {
      debugPrint("Something wrong...")
      return
    }

    var urlRequest = URLRequest(url: hostString)
    urlRequest.httpMethod = "GET"

    let group = DispatchGroup()

    for _ in 0...9 {
      group.enter()
      let task = URLSession.shared.dataTask(with: urlRequest) { [weak self] data, _, error in

        if let error = error {
          debugPrint(error)
          group.leave()
          return
        }

        guard let data = data else {
          group.leave()
          return
        }

        let decoder = JSONDecoder()
        do {
          let decodedData = try decoder.decode(DogModel.self, from: data)
          debugPrint(decodedData.message)
          if let imageUrl = URL(string: decodedData.message) {
            self?.dogData.append(try Data(contentsOf: imageUrl))
          }
        } catch {
          debugPrint("Something wrong in decoding...")
        }
        group.leave()
      }

      task.resume()
    }

    group.notify(queue: .main) {
      self.tableView.reloadData()
    }
  }

문제

작업을 하다보니 옵셔널 데이터들을 핸들링 해야 하는 순간들이 꽤 많더라구. 하지만 중구난방 if let이나 guard let이 너무 가독성이 떨어지는 느낌이야. 그래서 위의 코드를 개선한다면 어떻게 하면 괜찮은지 궁금해.

추신

동작하는 원리가 궁금하다면 개인 레포지토리를 참고해주세요.