Swift: Assert / Guard

Wooyo·2023년 10월 23일
0
post-thumbnail

1. Assert / Guard

  • 앱 동작 중 생성하는 다양한 연산 결과값을 동적으로 안전하게 처리 / 확인을 도와주는 구문

2. Assertion (Assert)

  • assert(::file:line:) 함수를 사용
  • assert 함수는 디버깅 모드에서만 동작
  • 디버깅 중 조건의 검증을 위하여 사용
  • 실제 배포환경에서도 동작하는 precondition(::file:line:) 도 존재
var someInt: Int = 0

// 검증 조건에 부합함으로 동작하지 않는다.
assert(someInt == 0, "not 0")

someInt = 1
assert(someInt == 0) // 검증 에러 발생

func withAssert(age: Int?) {
	assert(age != nil, "age == nil")
    assert((age! >= 0) && (age! <= 130), "wrong age")
    
    print("age \(age!)")
}

withAssert(age: 50)
withAssert(age: -1) // 동작 중지, 검증 실패
withAssert(age: nil) // 동작 중지, 검증 실패

3. Early Exit / Guard

  • guard를 사용하여 잘못된 값의 전달 시 특정 구문을 빠르게 종료
  • 배포 환경에서도 동작
  • guard else return / break 구문으로 동작
    타입 캐스팅과 옵셔널도 자주 사용
func withGuard(age: Int?) {
	guard let chechAge = age, 
    chechAge < 130, 
    chechAge >= 0 else {
    	print("wrong age")
        // return or break 없을 시 컴퍼일 오류 발생
        return
    }
    
	print("age is \(checkAge)")
}

var count = 1
while true {
	guard count < 3 else {
    	break
    }
    print(count)
    count += 1
}
// 1
// 2

func someFunc(info: [String: Any]) {
	guard let name: info["name"] as? String else {
    	return
    }
    guard let age: info["age"] as? Int else {
    	return
    }
    
    print("\(name): \(age)")
}

someFunc(info: ["name": "Jimin", "age": "20"]) // 동작 안함
someFunc(info: ["name": "Jimin"]) // 동작 안함
someFunc(info: ["name": "Jimin", "age": 20]) // Jimin: 20
profile
Wooyo의 개발 블로그

0개의 댓글