option + 파일 클릭 => 활성화된 창 반대편에 파일 띄워줌
다음과 같이 Error를 enum으로 관리할 수 있다.
enum SearchNetworkError: Error {
case invalidURL
case invalidJSON
case networkError
var message: String {
switch self {
case .invalidURL, .invalidJSON:
return "데이터를 불러올 수 없습니다."
case .networkError:
return "네트워크 상태를 확인해주세요."
}
}
}
URLSession
URLRequest
NSMutableURLRequest
Decodable, JSONDecoder
/// A value that represents either a success or a failure, including an
/// associated value in each case.
@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)
...
}
self.shouldLoadResult = searchButtonTapped
.withLatestFrom(self.rx.text) { $1 ?? "" }
.filter { !$0.isEmpty }
.distinctUntilChanged() // 동일한 검색어는 내보내지 않도록 -> 불필요한 네트워크 통신 막아줌
Observable
.combineLatest( // 가장 최신의 값을 묶어서 전달
sortedType,
cellData
) { type, data -> [BlogListCellData] in
switch type {
case .title:
return data.sorted { $0.title ?? "" < $1.title ?? "" }
case .datetime:
return data.sorted { $0.datetime ?? Date() > $1.datetime ?? Date() }
case .cancel, .confirm:
return data
}
}
.bind(to: listView.cellData)
.disposed(by: disposeBag)