@@ -7,10 +7,15 @@ import Foundation
77import Photos
88import UIKit
99
10+ enum PhotoAccessError : Error {
11+ case denied
12+ }
13+
1014final class SentenceCardViewModel : BaseViewModel {
1115 struct State {
1216 var data : BookDetailItem ?
1317 var alertInfo : String ?
18+ var requestAccess : Bool = false
1419 var isLoading : Bool = false
1520 }
1621
@@ -19,6 +24,7 @@ final class SentenceCardViewModel: BaseViewModel {
1924 case didTapSaveButton( image: UIImage )
2025 case saveImageResult( Result < Void , Error > )
2126 case alertDismissed
27+ case settingsAlertDismissed
2228 case prepareToSaveImage
2329 }
2430
@@ -60,11 +66,16 @@ final class SentenceCardViewModel: BaseViewModel {
6066 case . success:
6167 newState. alertInfo = " 이미지를 저장했습니다! "
6268 case . failure( let error) :
63- // TODO : error는 로그로 찍어서 수집하기
64- newState. alertInfo = " [저장 실패] 잠시 후 다시 시도해주세요. "
69+ if error is PhotoAccessError {
70+ newState. requestAccess = true
71+ } else {
72+ newState. alertInfo = " [저장 실패] 잠시 후 다시 시도해주세요. "
73+ }
6574 }
6675 case . alertDismissed:
6776 newState. alertInfo = nil
77+ case . settingsAlertDismissed:
78+ newState. requestAccess = false
6879 case . prepareToSaveImage:
6980 newState. isLoading = true
7081 }
@@ -108,12 +119,14 @@ final class SentenceCardViewModel: BaseViewModel {
108119 if status == . notDetermined {
109120 status = await PHPhotoLibrary . requestAuthorization ( for: . addOnly)
110121 }
111- guard status == . authorized || status == . limited else {
112- throw NSError (
113- domain: " PhotoLibrary " ,
114- code: 2 ,
115- userInfo: [ NSLocalizedDescriptionKey: " 포토 라이브러리 접근 권한이 필요합니다. " ]
116- )
122+
123+ switch status {
124+ case . authorized, . limited:
125+ return
126+ case . denied, . restricted:
127+ throw PhotoAccessError . denied
128+ default :
129+ throw PhotoAccessError . denied
117130 }
118131 }
119132}
0 commit comments