Swift3(스위프트3)

swift3 스위프트3 assert, guard

알통몬_ 2017. 7. 11. 11:54
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 assert 와 guard 에 대해 공부합니다.


 애플리케이션이 동작하는 중에 생성하는 다양한 결과 값들을 동적으로 확인하고 안전하게 처리할 수 있도록

확인하고 빠르게 처리할 수 있습니다.


- assert :

 디버그 모드에서만 동작하고, 배포된 애플리케이션에서는 제외됩니다.

 * 주로 디버깅 중 조건 검증을 위해 사용합니다.

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

 

ex)

 var intValue : Int = 0

 assert(intValue == 0, "intValue != 0")

 intValue = 1

 assert(intValue == 0)

 assert(intValue == 0, "inValue != 0")



// assert의 첫 번째 매개 변수는 검증할 조건이 들어갑니다. 검증에 실패할 경우 동작이 중지됩니다.

// 두 번째 매개 변수에는 첫 번째 매개 변수의 검증이 실패했을 경우 보여질 메시지이며,

   두 번째 매개 변수는 생략 가능합니다.

//assert 함수를 통해 검증에 실패하면 오류 메시지가 표시됩니다.

 

예제)

 func checkAge( age : Int? ) {

   assert(age!=nil, "age == nil) 

   assert((age! >= 0 && (age! <=150), "나이를 0세에서 150세 사이로 입력해주세요.")

   print("입력하신 나이는 \(age!)입니다")

}

checkAge(age: 26) // 입력하신 나이는 26입니다

checkAge(age: -10) // 검증에 실패, 동작 중지

checkAge(age : nil) // 검증에 실패, 동작 중지



다음은 guard 입니다.

- guard :

guard 를 사용해서 잘못된 값이 전달될 경우 특정 실행 구문을 빠르게 종료합니다.

assert 와는 다르게 디버깅 모드 뿐만이 아니라 어떤 조건이어도 동작합니다.

guard 에는 else 블록이 존재하는데 else 블록 내부에는 특정 코드를 종료하는 break, return 문이 무조건 존재해야 합니다.

* 타입 캐스팅 또는 옵셔널과 자주 사용된다고 하니 꼭 익혀놔야겠죠?

그 외에도 단순 조건 판단 후 빠르게 종료를 할 때에도 사용됩니다.


예제)

 func example(age : Int?) {

   guard let inputAge = age,

     inputAge< 150,

     inputAge>=0 else {

       print("나이를 0세에서 150세 사이로 입력해주세요")

       return

     }

   print("입력한 나이는 \(inputAge) 입니다")

   // * guard 구문에서 선언한 let 은 guard 구문 밖에서도 사용이 가능합니다. * //

 }


while 문 안에서도 사용할 수 있습니다.

var countInt : Int = 0

while true {

   guard countInt < 5 else {

     return

   }

   print(countInt)

   count += 1

}


딕셔너리와도 사용되는데요.

예제)

func useBothDictionary( nameNAge : [String, Any]) {

   guard let name = nameNAge["name"] as? String else {

     return

   }

   guard let age = nameNAge["age"] as? Int else {

     return

   }

   print("이름 :\(name) , 나이 :\(age)")

}


useBothDictionary(nameNAge : ["name":"al","age":"26"])

// guard 문에서 검증 실패로 건너뜀

useBothDictionary(nameNAge : ["name":"tong"])

 // guard 문에서 검증 실패로 건너뜀

useBothDictionary(nameNAge : ["name":"mon","age":26])

 // 이름 :mon, 나이 : 26 



이해가 되셨나요 ㅎㅎ

다음 포스팅에서는 프로토콜에 대해 공부합니다.

swift에서 프로토콜은 어떤 의미이며 어떤 상황에서 쓰이는지 같이 공부해봅시다~~

이상입니다.

반응형