[Alamofire 소스 분석] 02 - AFError & Notifications & DispatchQueue + Alamofire

3340 단어

1. AFError 개요


저자는 우선 전체 프로젝트에서 만나는 error를 AFError 매거에 집중했다.원본 코드에서 알 수 있듯이 프로젝트에서 만나는 error는 다섯 가지가 있는데 그것이 바로 AFError의case입니다. 각각case는 하나의 관련 값을 가지고 있습니다. (무엇이 관련 값입니까>>)우리는 Swift 매거진의 관련 값 특성을 이용하여 오류가 발생했을 때 어떤 종류의 값도 연결합니다.예를 들어 이 오류case invalidURL(url: URLConvertible)라면 여기에 URL이 연결되어 있습니다. 그러면 error를 만났을 때 어느 URL이 비합법적인지 알려줄 수 있습니다.다른 네 개의 케이스와 관련된 것은 AFError 안에 내장된 enum 형식 (Swift 허용 형식 삽입) 으로 더욱 구체적인 오류 원인을 알려줄 수 있다.
public enum AFError: Error {

    //  
    public enum ParameterEncodingFailureReason {
    
    }

    //  
    public enum MultipartEncodingFailureReason {
    
    }

    //  
    public enum ResponseValidationFailureReason {

    }

    //  
    public enum ResponseSerializationFailureReason {

    }

    //  
    case invalidURL(url: URLConvertible)
    case parameterEncodingFailed(reason: ParameterEncodingFailureReason)
    case multipartEncodingFailed(reason: MultipartEncodingFailureReason)
    case responseValidationFailed(reason: ResponseValidationFailureReason)
    case responseSerializationFailed(reason: ResponseSerializationFailureReason)
}

2. AdapterError


이것AdapterErrorRequestAdapter을 위해 전문적으로 서비스하는 것이다.
여기에서 먼저 간단하게 소개합니다RequestAdapter: RequestAdapter는 프로토콜입니다. 우리는 요청 어댑터를 사용자 정의하고 이 프로토콜을 따를 수 있습니다.사용자 정의 어댑터를 통해 요청을 보낼 때 요청과 관련된 데이터를 기본적으로 추가할 수 있습니다. 구체적으로 보십시오: [Alamofire 원본 해석] 08 - Request.AdapterError는 적합성을 요청하는 과정에서 발생할 수 있는 오류의 구조 유형이다.Error의 extension에서 정의된 underlyingAdaptError 은 적합 과정에서 발생할 수 있는 오류입니다.

3. Error Booleans


여기에 사용하기 편리한 읽기 전용 속성을 정의하여 우리가 개발할 때 판단하는 데 편리하다.사실 우리의 개발에서도 일부 판단을 읽기 전용 속성이나 Bool로 되돌리는 방법으로 자주 쓴다.이것은 코드의 가독성을 높이는 매우 좋은 습관이다.Swift에서 애플은 이미 습관적으로 Bool 유형의 속성을 is 로 시작하여 이름을 지었는데, 나도 개인적으로 is 으로 시작하여 이름을 지으면 가독성이 더욱 높아질 것이라고 생각한다.
extension AFError {
    public var isInvalidURLError: Bool {
        if case .invalidURL = self { return true }
        return false
    }
    
    //   Error Booleans ...
}

4. Convenience Properties


이 부분의 내용은 사용하기 편리한 error와 관련된 속성으로 특별한 것이 없습니다.

5. Notifications


Notifications 이 파일은 확장 Notification.Name 을 통해 프로젝트에 사용할 알림 이름을 정의합니다.우리는 이 형식으로 정의하는 것을 배울 수 있다rawValue: org.alamofire.notification.name.task.didResume.또 하나의 키를 정의했다.

6. DispatchQueue+Alamofire

DispatchQueue+Alamofire 에서는 확장DispatchQueue을 통해 서로 다른 우선순위의 전역 대기열을 정의합니다.
  • userInteractive: 사용자와 상호작용하는 작업 대기열은 일반적으로 UI 새로 고침과 관련이 있습니다. 예를 들어 애니메이션 같은 것
  • userInitiated: 사용자가 시작하고 즉시 결과를 받아야 하는 작업 대기열
  • utility: 시간이 걸리는 작업 대기열
  • background: 백그라운드 작업 대기열, 사용자가 관심을 갖지 않아도 되고 보통 시간이 비교적 길다
  • 또한 하나의 방법을 정의했다. 지정된 시간을 거친 후에closure를 실행하면 이런 작법은 더욱 익숙하고 이해하기 쉽다.
    func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) {
        asyncAfter(deadline: .now() + delay, execute: closure)
    }
    

    어떤 문제가 있으면 여러분의 메시지를 환영합니다!
    제가 관리하는 Swift 개발군에 오신 것을 환영합니다. 536353151, 이 그룹은 Swift 관련 내용만 논의합니다.
    오리지널 문장은 전재하여 출처를 밝혀 주십시오.감사합니다.

    좋은 웹페이지 즐겨찾기