Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Reference Cycle
- NavigationSearchBar
- UIKit
- 면접을 위한 CS전공 지식 노트
- 면접을 위한 CS 전공 지식 노트 Tree
- 양궁대회
- CoreData
- Value Type Reference Type
- 롤케이크 자르기
- Array vs Linked List
- SWIFT
- Input Output
- CarouselCollectionview
- ReferceCycle
- 프로그래머스
- TableView Section
- retain cycle
- class struct
- UserDefaults
- TableView
- til
- 강한 참조 순환
- 자료구조
- wil
- coremotion
- 테이블뷰 나누기
- @escaping
- tableview section별 다른 cell적용
- firebase
- Carousel CollectionView
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[Swift],[Result 타입 파보기] 본문
TIL
Result 타입의 내부
@frozen
public enum Result<Success, Failure: Error> {
case success(Success)
case failure(Failure)
@inlinable
public func map<NewSuccess>(
_ transform: (Success) -> NewSuccess
) -> Result<NewSuccess, Failure> {
switch self {
case let .success(success):
return .success(transform(success))
case let .failure(failure):
return .failure(failure)
}
}
@inlinable
public func mapError<NewFailure>(
_ transform: (Failure) -> NewFailure
) -> Result<Success, NewFailure> {
switch self {
case let .success(success):
return .success(success)
case let .failure(failure):
return .failure(transform(failure))
}
}
@inlinable
public func flatMap<NewSuccess>(
_ transform: (Success) -> Result<NewSuccess, Failure>
) -> Result<NewSuccess, Failure> {
switch self {
case let .success(success):
return transform(success)
case let .failure(failure):
return .failure(failure)
}
}
@inlinable
public func flatMapError<NewFailure>(
_ transform: (Failure) -> Result<Success, NewFailure>
) -> Result<Success, NewFailure> {
switch self {
case let .success(success):
return .success(success)
case let .failure(failure):
return transform(failure)
}
}
@inlinable
public func get() throws -> Success {
switch self {
case let .success(success):
return success
case let .failure(failure):
throw failure
}
}
}
extension Result where Failure == Swift.Error {
@_transparent
public init(catching body: () throws -> Success) {
do {
self = .success(try body())
} catch {
self = .failure(error)
}
}
}
extension Result: Equatable where Success: Equatable, Failure: Equatable { }
extension Result: Hashable where Success: Hashable, Failure: Hashable { }
extension Result: Sendable where Success: Sendable { }
Reuslt?
- Result는 열거형이며 제네릭으로 Succees의 타입과 Error타입을 가진다
- 케이스는 success와 failure가 있으며 success는 인자로 받은 Success 타입을 failure은 Failure Error타입을 가지고 있다.
Reference
https://github.com/apple/swift/blob/main/stdlib/public/core/Result.swift