1️⃣ 함수의 매개변수에 기본값 주기
func printTimesTables(for number: Int, end: Int = 12) {
for i in 1...end {
print("\(i) x \(number) is \(i * number)")
}
}
printTimesTables(for: 5, end: 20)
printTimesTables(for: 8)
- 함수에서 매개변수 end의 기본값을 설정했기 때문에 printTimesTables를 사용할 때 end에 대한 값을 주지 않아도 된다.
2️⃣ 함수의 오류를 핸들링하는 방법
이해가 어려우니 예시와 함께 알아보자.
[예시]
비밀번호를 설정하는데, 설정할 비밀번호의 안전성을 확인하는 함수를 작성하고자 한다.
①5자 미만의 너무 짧은 비밀번호와 ②12345 같이 쉬운 비밀번호는 불가능하다.
비밀번호 길이에 따라서 안전성을 평가한 메시지를 반환한다.
Step 1. 발생가능한 함수의 오류를 정의
enum PasswordError: Error {
case short, obvious
}
- enum을 사용해 오류를 정의한다
Step 2. 발생가능한 함수의 오류를 정의
func checkPassword(_ password: String) throws -> String {
if password.count < 5 {
throw PasswordError.short
}
if password == "12345" {
throw PasswordError.obvious
}
if password.count < 8 {
return "OK"
} else if password.count < 10 {
return "Good"
} else {
return "Excellent"
}
}
- 먼저, 입력된 비밀번호의 길이가 5보다 작은 경우 PasswordError.short라는 오류를 던진다. (너무 짧은 비밀번호를 입력한 경우)
- 다음으로, 입력된 비밀번호가 "12345"와 같은 경우 PasswordError.obvious라는 오류를 던진다. (너무 쉽게 추측할 수 있는 비밀번호를 입력한 경우)
- 위의 두 경우에 해당하지 않는 경우, 비밀번호의 길이에 따라 "OK", "Good", "Excellent" 중 하나를 반환
- throws는 반드시 에러가 발생함을 의미하는 것이 아니라, 가능하다는 의미다.
- 오류를 던지면 함수가 즉시 종료된다. 즉, 문자열을 반환하지 않는다.
Step 3. 발생가능한 함수의 오류를 정의
let string = "12345"
do {
let result = try checkPassword(string)
print("Password rating: \(result)")
} catch PasswordError.short {
print("Please use a longer password.")
} catch PasswordError.obvious {
print("I have the same combination on my luggage!")
} catch {
print("There was an error.")
}
- try 는 do 블럭 안에 사용한다.
- try 는 일반적으로 함수가 에러를 던지지 않는 경우에 사용
- try? 는 에러를 던질 수 있는 함수를 호출하고, 에러가 발생할 시 옵셔널 값을 반환한다.
- try! 는 에러를 던질 수 있는 함수를 호출하고, 에러가 발생할 시 런타임 에러를 발생시킨다.
- catch 블록을 사용해 모든 종류의 에러를 처리한다
catch-try가 잘 이해가 안됐다...
'iOS > SwiftUI' 카테고리의 다른 글
[Udemy : SwiftUI+SwiftData Masterclass] Section 10. AFRICA (0) | 2023.11.08 |
---|---|
[Day 9] 클로저(Closure), passing functions into functions (0) | 2023.08.11 |
[Day 7] 함수, 매개변수, 반환값 (0) | 2023.08.06 |
[SwiftUI] Setting App Icon (0) | 2023.08.05 |
[Day 6] 반복문 : Loop (for, while), break & continue (0) | 2023.08.05 |