Open bdrsky2010 opened 8 months ago
사진 이미지 파일 이름 get 메서드 작성 필요!
inout 방식에서 return 받는 방식으로 변경
private func fetchImagesURL<T: RawDrink>(drinkData: [T], imagesURL: inout [URL?]) async {
await withTaskGroup(of: (Int, URL?).self) { group in
for (index, drink) in drinkData.enumerated() {
group.addTask {
do {
// TODO: get image file name
let url = try await self.fireStorageService.fetchImageURL(folder: .drink, fileName: "")
return (index, url)
} catch {
print("error :: fetchImageURL", error.localizedDescription)
return (index, nil)
}
}
}
var result = [(Int, URL?)]()
for await downloadURL in group {
result.append(downloadURL)
}
imagesURL = result.sorted(by: { $0.0 < $1.0 }).map { $0.1 }
}
}
private func fetchImagesURL<T: RawDrink>(drinkData: [T]) async -> [URL?] {
await withTaskGroup(of: (Int, URL?).self) { group in
for (index, drink) in drinkData.enumerated() {
group.addTask {
do {
// TODO: get image file name
let url = try await self.fireStorageService.fetchImageURL(folder: .drink, fileName: "")
return (index, url)
} catch {
print("error :: fetchImageURL", error.localizedDescription)
return (index, nil)
}
}
}
var result = [(Int, URL?)]()
for await downloadURL in group {
result.append(downloadURL)
}
return result.sorted(by: { $0.0 < $1.0 }).map { $0.1 }
}
}
private func getDrinkType(drinkJsonType: DrinkJsonType) -> DrinkType {
switch drinkJsonType {
case .beer:
return .beer
case .wine:
return .wine
case .traditional:
return .traditional
case .whiskey:
return .whiskey
}
}
fetchImageURL 메서드에 위 메서드 추가
private func fetchImagesURL<T: RawDrink>(drinkJsonType: DrinkJsonType, drinkData: [T]) async -> [URL?] {
let category = getDrinkType(drinkJsonType: drinkJsonType)
return await withTaskGroup(of: (Int, URL?).self) { group in
for (index, drink) in drinkData.enumerated() {
group.addTask {
do {
if let fileName = Formatter.getImageName(category: category, detailedCategory: drink.type) {
let url = try await self.fireStorageService.fetchImageURL(folder: .drink, fileName: "")
return (index, url)
} else {
print("error :: getImageName")
return (index, nil)
}
} catch {
print("error :: fetchImageURL", error.localizedDescription)
return (index, nil)
}
}
}
var result = [(Int, URL?)]()
for await downloadURL in group {
result.append(downloadURL)
}
return result.sorted(by: { $0.0 < $1.0 }).map { $0.1 }
}
}
사진 이미지 파일 이름 get 메서드 작성 필요!
작성완료
각 case에 적합하지 맞지않는 return 값을 갖고 있어 수정.
private enum DrinkJsonType: CaseIterable {
case beer, wine, traditional, whiskey
var jsonName: String {
switch self {
case .beer:
return "BeerTest"
case .traditional:
return "TraditionalTest"
case .whiskey:
return "WhiskeyTest"
case .wine:
return "WineTest"
}
}
}
DrinkUploadViewModel.swift
외부에서 호출되지 않는 메서드 private으로 변경
RawDrink protocol 추가
각 Raw 모델에 RawDrink protocol 채택 및 private struct로 변경
DrinkJsonType private enum 으로 변경
모든 이미지 fetch 함수 작성
위 메서드 호출하는 부분