[swift] SwiftyJSON을 사용하여 Alamofire 응답에서 특정 필드값을 추출하여 이메일 유효성 검사하는 방법

Alamofire는 Swift에서 사용되는 HTTP 통신 라이브러리이며, SwiftyJSON은 JSON 데이터를 쉽게 처리하기 위한 라이브러리입니다. 이 두 라이브러리를 함께 사용하여 Alamofire의 응답에서 특정 필드값을 추출하고, 해당 값이 이메일 형식에 맞는지 유효성을 검사하는 방법에 대해 알아보겠습니다.

1. Alamofire와 SwiftyJSON 라이브러리 설치

먼저, Alamofire와 SwiftyJSON 라이브러리를 프로젝트에 추가해야 합니다. 이를 위해 Cocoapods를 사용할 수 있습니다. Podfile 에 다음과 같은 내용을 추가하고, 터미널에서 pod install 명령을 실행하세요.

platform :ios, '13.0'
use_frameworks!

target 'YourProjectName' do
  pod 'Alamofire'
  pod 'SwiftyJSON'
end

2. Alamofire를 사용하여 서버로부터 응답 받기

import Alamofire

func fetchDataFromServer(completion: @escaping (Result<Any, Error>) -> Void) {
    let url = "http://example.com/api/data"

    Alamofire.request(url).responseJSON { response in
        switch response.result {
        case .success(let value):
            completion(.success(value))
        case .failure(let error):
            completion(.failure(error))
        }
    }
}

fetchDataFromServer 함수는 서버로부터 데이터를 가져오는 Alamofire 요청을 수행합니다. 이 함수의 completion 클로저 매개변수는 요청이 완료되면 호출되는 콜백입니다.

3. SwiftyJSON을 사용하여 필드값 추출

import SwiftyJSON

func extractEmailFromResponse(response: Any) -> String? {
    let json = JSON(response)

    // 응답에서 이메일 필드 추출
    let email = json["email"].string
    
    return email
}

extractEmailFromResponse 함수를 사용하여 Alamofire 응답에서 이메일 값을 추출합니다. SwiftyJSON 라이브러리를 사용하여 JSON 데이터를 다루기 때문에, 먼저 JSON 객체로 변환해야 합니다. 추출하고자 하는 필드는 json["email"]과 같이 접근할 수 있습니다. 해당 필드의 값은 이메일 형식에 맞는 문자열로 반환됩니다.

4. 이메일 유효성 검사

func validateEmail(email: String?) -> Bool {
    guard let email = email else {
        return false
    }
    
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
    let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    
    return emailPred.evaluate(with: email)
}

validateEmail 함수를 사용하여 추출한 이메일 값의 유효성을 검사합니다. 정규식과 NSPredicate를 사용하여 이메일 형식에 맞는지 검사합니다.

5. 실행하기

fetchDataFromServer { result in
    switch result {
    case .success(let response):
        let email = extractEmailFromResponse(response: response)
        let isValidEmail = validateEmail(email: email)
        
        if isValidEmail {
            print("Valid email: \(email ?? "")")
        } else {
            print("Invalid email")
        }
    case .failure(let error):
        print("Error fetching data: \(error.localizedDescription)")
    }
}

위 코드를 실행하여 서버로부터 데이터를 가져오고, 해당 데이터의 이메일 값을 추출한 후 유효성을 검사합니다. 유효한 이메일은 “Valid email: (email ?? “”)” 메시지를 출력하고, 유효하지 않은 이메일은 “Invalid email” 메시지를 출력합니다.

참고 자료: