Search

property wrapper 만들어 보기(이경헌)

PhoneNumber

@propertyWrapper struct PhoneNumber { private var value: String = "" private let regex = "^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$" var wrappedValue: String { get { value } set { if isMatchingRegex(newValue) { value = newValue } else { value = "다시 전화번호를 입력해주세요" } } } init() { self.value = "미등록" } init(wrappedValue: String) { if isMatchingRegex(wrappedValue) { self.value = wrappedValue } else { self.value = "미등록" } } private func isMatchingRegex(_ str: String) -> Bool { return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: str) } } struct Person { var name: String @PhoneNumber var tell: String init() { self.name = "" } } var person = Person() print(person.tell) // 미등록 person.name = "이경헌" person.tell = "010-1234-5678" print(person.tell) // 010-1234-5678 person.tell = "1234567890" print(person.tell) // 다시 전화번호를 입력해주세요 person.tell = "011-123-4567" print(person.tell) // 011-123-4567 person.tell = "011" print(person.tell) // 다시 전화번호를 입력해주세요 person.tell = "011-7" print(person.tell) // 다시 전화번호를 입력해주세요
Swift
복사