[swift] PhoneNumberKit을 사용하여 특정 국가의 전화번호에 따른 입력 화면 표시하기
Swift 언어를 사용하고 있다면, PhoneNumberKit 라이브러리를 활용하여 특정 국가의 전화번호에 따른 입력 화면을 구현할 수 있습니다. PhoneNumberKit은 전화번호를 파싱하고 형식화하는 기능을 제공하는 강력한 라이브러리입니다.
PhoneNumberKit 설치
PhoneNumberKit은 CocoaPods를 통해 쉽게 설치할 수 있습니다. Podfile에 다음과 같이 PhoneNumberKit 의존성을 추가한 후, pod install
명령을 실행하세요.
pod 'PhoneNumberKit'
전화번호 입력 화면 구현하기
- 먼저, PhoneNumberKit을 import하여 사용할 수 있도록 준비합니다.
import PhoneNumberKit
- 사용자에게 전화번호를 입력받을 UITextField를 생성합니다.
let phoneNumberTextField = UITextField()
- PhoneNumberKit 인스턴스를 생성합니다.
let phoneNumberKit = PhoneNumberKit()
- 특정 국가 코드를 설정해줍니다. 예를 들어, 한국의 경우 국가 코드는 “+82”입니다.
let countryCode = "+82"
- UITextFieldDelegate를 상속받은 클래스를 정의하고,
textFieldShouldChangeCharactersIn
메서드를 구현합니다.
class PhoneNumberTextFieldDelegate: NSObject, UITextFieldDelegate {
let phoneNumberKit = PhoneNumberKit()
let countryCode = "+82"
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return true }
// 전체 텍스트와 입력된 텍스트를 결합합니다.
let fullText = (text as NSString).replacingCharacters(in: range, with: string)
do {
// 전화번호를 파싱합니다.
let phoneNumber = try phoneNumberKit.parse(fullText, withRegion: countryCode, ignoreType: true)
// 파싱에 성공하면 파싱된 전화번호를 표시합니다.
textField.text = phoneNumberKit.format(phoneNumber, toType: .international)
} catch {
// 파싱에 실패한 경우, 이전에 입력된 텍스트를 그대로 표시합니다.
textField.text = text
}
return false
}
}
- ViewController에서 UITextFieldDelegate 프로토콜을 구현하고, PhoneNumberTextFieldDelegate 인스턴스를 생성하여 UITextField에 할당합니다.
class ViewController: UIViewController, UITextFieldDelegate {
let phoneNumberTextField = UITextField()
let phoneNumberDelegate = PhoneNumberTextFieldDelegate()
override func viewDidLoad() {
super.viewDidLoad()
// UITextField의 델리게이트를 설정합니다.
phoneNumberTextField.delegate = phoneNumberDelegate
}
}
이제 사용자가 전화번호를 입력할 때, 사용자가 설정한 국가 코드에 따라 입력 화면이 자동으로 변환됩니다. PhoneNumberKit을 사용하면 유효한 전화번호를 손쉽게 파싱하고 형식화할 수 있으며, 사용자가 입력한 번호가 유효하지 않으면 오류를 처리할 수도 있습니다.
PhoneNumberKit에 대한 자세한 내용은 GitHub 페이지를 참조하시기 바랍니다.