iOS/Swift

[Swift] guard와 if-let 비교해보기

듀니듀니 2022. 12. 7. 17:31

안녕하세요!

 

오늘은 guard문과 if문의 차이를 비교정리해보겠습니다 :0

 


 

1. guard문

  • guard 문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정, guard 문에 주어진 조건문이 거짓일 때, 여기에 달려있는 코드 블럭이 실행된다.
  • 조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는 것보다 가독성이 높은 장점.
  • if 문과 다르게, else를 항상 달아야 한다.
func guardFunc (be: String?) {
	guard be != nil else { return }
	print(be)
}

guardFunc(be: "20")
guardFunc(be: nil)
  • 옵셔널 바인딩은 if-let 문법을 사용한 옵셔널 바인딩과 다르게 옵셔널 바인딩된 상수를 조건문 범위 바깥에서도 사용할 수 있다.
  • guard문의 경우 상수의 사용범위는 함수 나머지 영역이 된다.
func guardInFunc (string: String?) {

    guard let letString = string else { return }

    print(letString!, "second param", separator: "")
}
guardInFunc("test")
  • 복합 옵셔널 바인딩
  • 복합해서 사용가능, 모든 파라미터가 nil이 아닐경우 조건을 충족하고 출력문을 수행한다.
func guardWithCompoundOptionalBinding (firstName: String?, lastName: String?, dateOfBirth: String?) {

    guard let fname = firstName, let lname = lastName, let dob = dateOfBirth else { return }

    print("\(fname) \(lname) \(dob)")

}

guardWithCompoundOptionalBinding("sun", lastName : "kim", dateOfBirth: "")

 

2. if-let

var optionalName: String? = "Daeyeon"
var greeting = "Hello!"

if let name = optionalName 
{
  greeting = "Hello, \(name)"
}
  • “non-optional 변수인 name”에 “Optional 변수인 optionalName” 안에 들어 있는 값을 할당할 수 있다면 {} 안의 내용을 실행하라”라는 의미. (name은 내가 만든상수, if 문 안에서만 사용가능하다.

 

3. 결론

if 문 - 조건이 하나이거나 조건 전제가 단순할 때, 바인딩한 상수를 다른 값에 처리하는 상황

 

guard 문 - 복잡한 문장일때, 바인딩한 상수를 동일한 스코프에서 사용할 때

'iOS > Swift' 카테고리의 다른 글

[Swift] 속성 감시자 (Property Observer)  (0) 2022.11.25
[Swift] 서브스크립트 (Subscripts)  (0) 2022.11.25
[Swift] 클래스와 구조체 (Class, Struct)  (0) 2022.11.22
[Swift] Optional  (0) 2022.11.17
[Swift] Array  (0) 2022.11.16