-
(Swift) Result<Success, Failure> 타입iOS💖 2024. 10. 14. 17:10
네트워크를 공부하며 알게된 Result 타입은, success 혹은 failure 결과를 나타내준다.

enumeration (열거형) Result type @frozen public enum Result<Success, Failure> where Failure : Error { /// A success, storing a `Success` value. case success(Success) /// A failure, storing a `Failure` value. case failure(Failure) .... }사용 예시)
struct UserProfile: Codable { let loginId: String let avatarUrl: String let followers: Int let following: Int enum codingKeys: String, CodingKey { case loginId = "login" case avatarUrl = "avatar_url" case followers case following } } final class NetworkService { let session: URLSession init(configuration: URLSessionConfiguration) { session = URLSession(configuration: configuration) } func fetchProfile(userName: String, completion: @escaping (Result<UserProfile, Error>) -> Void { let urlString = "https://xxxx.xxxxx.com/users/\(userName)" let url = URL(string: urlString)! let task = session.dataTask(with: url) { data, response, error in if let error = error { // nil이 아닌경우, 즉 error에 값이 있는 경우 completion(.failure(error)) return } if let response = response as? HTTPURLResponse, !(200..<300).contains(response.statusCode) { completion(.failure(error)) return } guard let data = data else { // data is optional completion(.failure(error)) return } do { let decoder = JSONDecoder() let profile = try decoder.decoder(UserProfile.self, from: data) completion(.success(profile)) } catch let error { completion(.failure(error)) } } task.resume() } } let networkService = NetworkService(configuration: .default) // NetworkService 객체 사용 기본형 // networkService.fetchProfile(userName: "aaa", completion: (Result<UserbProfile, any Error>) -> Void) networkService.fetchProfile(userName: "hortenssiaa") { result in // result 는 Result<UserProfile, Error> 타입이므로, success / failure 두가지 case로 나뉜다 switch result { case .success(let profile): print("[Profile]: \(profile)") case .failure(let error): print("[Error]: \(error)") } }https://hortenssiaa.tistory.com/35
(Swift) @frozen
네트워크를 공부하다가, Result enum을 알게 되었고Result 가 정의 돼있는 코드를 보니 @frozen 이라는 attributes 를 보게되었다. @frozen public enum Result where Failure : Error { /// A success, storing a `Success` value. cas
hortenssiaa.tistory.com
'iOS💖' 카테고리의 다른 글
(Swift) 메모리 참조 속성 (strong, week, unowned, optional unowned) (3) 2024.10.16 (Swift) ARC (Automatic Reference Counting, 자동 참조 계산) (1) 2024.10.15 (Swift) @frozen (3) 2024.10.14 (Swift) private(set) var (0) 2024.10.11 (Swift) Generic 제네릭 (2) 2024.10.11