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
복사