[Swift 정면돌파] 13. Assert 와 Guard
Assertion
assert(_:_:file:line:)
함수를 사용- assert 함수는 디버깅 모드에서만 동작 → 배포하는 애플리케이션에서는 제외됨
- 예상했던 조건의 검증을 위하여 사용
var someInt: Int = 0
// 검증 조건과 실패시 나타날 문구를 작성
// 검증 조건에 부합하므로 문구가 출력되지 않음
assert(someInt == 0, "someInt != 0")
someInt = 1
// assert(someInt == 0) // 동작 중지, 검증 실패
// assert(someInt == 0, "someInt != 0") // 동작 중지, 검증 실패
// assertion failed: someInt != 0: file guard_assert.swift, line 26
func functionWithAssert(age: Int?) {
assert(age != nil, "age == nil")
assert((age! >= 0) && (age! <= 130), "나이값 입력이 잘못되었습니다")
print("당신의 나이는 \(age!)세입니다")
}
functionWithAssert(age: 50)
// functionWithAssert(age: -1) // 동작 중지, 검증 실패
// functionWithAssert(age: nil) // 동작 중지, 검증 실패
Guard
guard
를 사용하여 잘못된 값의 전달 시 특정 실행구문을 빠르게 종료- 디버깅 모드 뿐만 아니라 어떤 조건에서도 동작함 (배포용 빌드에서도)
guard
의else
블럭 내부에는 특정 코드블럭을 종료하는 지시어(return
,break
등) 가 필수임- 타입 캐스팅, 옵셔널과도 자주 사용, 그 외에도 단순 조건 판단 후 빠르게 종료 때도 용이함
func functionWithGuard(age: Int?) {
guard let unwrappedAge = age,
unwrappedAge < 130,
unwrappedAge >= 0 else {
print("나이값 입력이 잘못되었습니다")
return
}
print("당신의 나이는 \(unwrappedAge)세입니다")
}
var count = 1
while true {
guard count < 3 else {
break
}
print(count)
count += 1
}
// 1
// 2
// 3 이 되면 count < 3 조건에 부합되므로
// break 문이 실행되어 루프가 종료됨
func someFunction(info: [String: Any]) {
guard let name = info["name"] as? String else {
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
if-let
을 사용하여 옵셔널 바인딩 vs guard
를 사용하여 옵셔널 바인딩
// 1. if let 옵셔널 바인딩
if let unwrapped: Int = someValue {
// do something
unwrapped = 3
}
// if 구문 외부에서는 unwrapped 사용이 불가능
// unwrapped = 5
// 2. guard 옵셔널 바인딩
// gaurd 구문 이후에도 unwrapped 사용 가능
guard let unwrapped: Int = someValue else {
return
}
unwrapped = 3
Author And Source
이 문제에 관하여([Swift 정면돌파] 13. Assert 와 Guard), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@haero_kim/Swift-정면돌파-13.-Assert-와-Guard저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)