에러 핸들링
- 에러타입 선언
- 에러던지기
- func 함수명()throws → 반환타입(생략가능){ guard 값 else{throw 던질에러}}
- 스로잉 메서드와 함수 호출
- do{ try 함수} catch 던진에러{return}
정규식사용 예시1
enum PasswordError: Error {
case tooShort
case missingUppercase
case missingLowercase
case missingNumber
case missingSymbol
}
func validatePassword(_ expression:String) throws{
let upperCase = ".*[A-Z]+.*"
let lowerCase = ".*[a-z]+.*"
let numberCase = ".*[0-9]+.*"
let symbolsCase = ".*[!@#$%^&*()_+-=[]{}|;:,./<>?]+.*"
guard expression.count > 8 else {
throw PasswordError.tooShort
}
guard let _ = expression.range(of: upperCase, options: .regularExpression) else {
throw PasswordError.missingUppercase
}
guard let _ = expression.range(of: lowerCase, options: .regularExpression) else {
throw PasswordError.missingLowercase
}
guard let _ = expression.range(of: numberCase, options: .regularExpression) else {
throw PasswordError.missingNumber
}
guard let _ = expression.range(of: symbolsCase, options: .regularExpression) else {
throw PasswordError.missingSymbol
}
}
do {
try validatePassword("AAAAaaaAAA2")
} catch let error as PasswordError {
switch error {
case .tooShort:
print("Password is too short")
case .missingUppercase:
print("Password is missing an uppercase letter")
case .missingLowercase:
print("Password is missing a lowercase letter")
case .missingNumber:
print("Password is missing a number")
case .missingSymbol:
print("Password is missing a symbol")
}
}
Contains사용 예시2,
enum PasswordError: Error {
case tooShort
case missingUppercase
case missingLowercase
case missingNumber
case missingSymbol
}
func validatePassword(_ expression:String) throws{
let symbolsCase = ".*[!@#$%^&*()_+-=[]{}|;:,./<>?]+.*"
guard expression.count > 8 else {
throw PasswordError.tooShort
}
guard let _ = expression.contains(where: { $0.isLowercase }) else {
throw PasswordError.missingUppercase
}
guard let _ = expression.contains(where: { $0.isUppercase }) else {
throw PasswordError.missingLowercase
}
guard let _ = expression.contains(where: { $0.isNumber }) else {
throw PasswordError.missingNumber
}
guard let _ = expression.range(of: symbolsCase, options: .regularExpression) else {
throw PasswordError.missingSymbol
}
}
do {
try validatePassword("AAAAaaaAAA2")
} catch let error as PasswordError {
switch error {
case .tooShort:
print("Password is too short")
case .missingUppercase:
print("Password is missing an uppercase letter")
case .missingLowercase:
print("Password is missing a lowercase letter")
case .missingNumber:
print("Password is missing a number")
case .missingSymbol:
print("Password is missing a symbol")
}
}