[iOS] Search Daum Blog

Grace·2022년 3월 8일
0

Xcode 단축키

option + 파일 클릭 => 활성화된 창 반대편에 파일 띄워줌

enum으로 Error 타입 만들기

다음과 같이 Error를 enum으로 관리할 수 있다.

enum SearchNetworkError: Error {
    case invalidURL
    case invalidJSON
    case networkError
    
    var message: String {
        switch self {
        case .invalidURL, .invalidJSON:
            return "데이터를 불러올 수 없습니다."
        case .networkError:
            return "네트워크 상태를 확인해주세요."
        }
    }
}

Foundation에서 제공하는 네트워크 통신 관련 class/struct

URLSession
URLRequest
NSMutableURLRequest

Decode

Decodable, JSONDecoder

Swift.Result

/// 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)
    
    ...
}

Observable.withLatestFrom

        self.shouldLoadResult = searchButtonTapped
            .withLatestFrom(self.rx.text) { $1 ?? "" }
            .filter { !$0.isEmpty }
            .distinctUntilChanged() // 동일한 검색어는 내보내지 않도록 -> 불필요한 네트워크 통신 막아줌

Observable.combineLatest

        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)
profile
Day By Day

0개의 댓글