728x90
반응형
애플리케이션이 동작 도중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있도록 도와주는 기능
assertion
조건들을 가지고 어떤 결과를 확인하는데 사용할 수 있다.
assert(_:_:file:line:) 함수를 사용한다.
assert 함수는 디버깅 모드에서만 동작한다.
배포하는 애플리케이션에서는 제외된다.
주로 디버깅 중 내가 예상했던 조건의 검증을 위해서 사용된다.
var someInt: Int = 0
aseert(someInt == 0, "someInt != 0") // someInt가 0인 경우 출력되는 값 없이 지나가지만 거짓인 경우 문자열을 출력한 후 디버깅을 중지한다.
someInt = 1
// assert(someInt == 0) // 동작 중지, 검증 실패
// assert(someInt == 0, "someInt != 0) // 동작 중지, 검증 실패
// assertion failed: someInt != 0: file guard_assert.swift
func functionWithAssert(age: Int?){
assert(age != nil, "age == nil")
assert((age! >0) && (age! <= 130), "나이값 입력이 잘못되었습니다.")
print("당신의 나이는 \(age!)세입니다.
}
functionWithAssert(age: 50) // 당신의 나이는 50세입니다.
functionWithAssert(age: -1) // 동작 중지, 검증 실패
functionWithAssert(age: nil) // 동작 중지, 검증 실패
Early Exit
guard를 사용하여 잘못된 값의 전달 시 특정 실행구문을 빠르게 종료한다.
디버깅 모드 뿐만 아니라 어떤 조건에서도 동작한다.
guard의 else 블럭 내부에는 특정 코드블럭을 종료한느 지시어(return, break 등)가 꼭 있어야 한다.
타입 캐스팅, 옵셔널과도 자주 사용된다.
그 외 단순 조건 판단 후 빠르게 종료할 때도 용이하다.
func functionWithGuard(age: Int?){
guard let unwrappedAge = age, // 먼저 언래핑을 해본다. 옵셔널 바인딩과 연결, age가 nil이라면 바로 return 된다.
unwrappedAge < 130,
unwrappedAge >= 0 else { # 앞 조건과 맞지 않으면 else 구문 실행
print("나이값 입력이 잘못되었습니다.")
return
}
print("당신의 나이는 \(unwrappedAge)세입니다.") # if let의 변수는 블록 내에서만 사용가능했지만 guard는 블록 밖에서도 사용가능
}
var count = 1
while true { // 반복문에서도 많이 활용함
guard count < 3 else {
break
}
print(count)
count += 1
}
// 1
// 2
// 특히 딕셔너리에서 많이 활용한다. 딕셔너리에서 나온 값들은 모두 옵셔널이다.
func someFunction(info: [String: Any]){
guard let name = info["name"] as? String else { # 키 name의 값을 캐스팅한다. (Any 타입이므로)
return
}
guard let age = info["age"] as? Int, age >= 0 else {
return
}
print("\(name): \(age)")
}
someFunction(info: ["name": "jenny", "age": "10"])
someFunction(info: ["name": "mike"])
someFunction(info: ["name": "yagom", "age: 10]) // yagom: 10
반응형
'IOS' 카테고리의 다른 글
swift - 오류처리 Error Handling by yagom (0) | 2023.01.10 |
---|---|
swift - 익스텐션 extension by yagom (0) | 2023.01.10 |
swift - 프로토콜 by yagom (0) | 2023.01.10 |
swift - 타입캐스팅 by yagom (0) | 2023.01.10 |
swift - 옵셔널 체이닝과 nil 병합 연산자 by yagom (0) | 2023.01.10 |