Language/Swift

Swift Assert와 Guard

Greensky0026 2021. 3. 14. 15:03
반응형

 

 이번엔 디버깅에 편리한 기능입니다.

애플리케이션 동작중 생성되는 연산 결과들을 동적으로 확인해

안전하고 빠르게 처리할 수 있습니다.

 

 

Assertion

assert(::file:line)함수를 사용합니다.

디버깅 모드에만 동작하구요, 조건검증에 사용합니다.

var num1 : Int = 0
assertion(num1 == 0, "someInt !")


var num2: Int = 1
assertion(num2 == 0, "num2 != 0")
//assertion failed: num2 != 0

음.. 하루만 더 일찍 공부했었으면 어제 코테문제를 풀면서 좀 덜 고생했겠네요.ㅜ

 

 

Guard

guard를 사용해 특정 실행구문이 잘못된 값을 전달하면

빠르게 종료시킵니다. 디버깅모드 + 어떤 조건에서도 동작합니다.

옵셔널과 같이 let-it 구문에서 사용

func guardEx(price: Int?){
	guard let unrappedPrice = price,
		unrappedPrice <= 100000 else {
		print("너무 비싸서 안사요")
		return
		}
	print("물건을 \(unrappedPrice)원에 구매했습니다.")
}
guardEx(price: 5000) //물건을 5000원에 구매했습니다.
guardEx(price: 5000000) //

 

반복문에 사용

var count = 0

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

 

추가예제

func insertInfo( info: [String: Any]) {
    guard let name = info["name"] as? String else{
        return
    }
    guard let price = info["price"] as? Int, price < 20000 else{
        return
    }
    guard let grade = info["grade"] as? Int, grade <= 5 else{
        return
    }
    print("\(name)의 가격은 \(price)원이고 평가는 \(grade)점이다.")
}

insertInfo( info: ["name": "뚝불", "price": 10000, "grade": 5])
//뚝불의 가격은 10000원이고 평가는 5점이다.
insertInfo( info: ["name": "피자", "price": 10000000, "grade": 3])
insertInfo( info: ["name": "초밥", "price": "9900", "grade": 1])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형