• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

질문입니다

19.08.14 00:52 작성 조회수 138

1

안녕하세요 수강생입니다.

옵셔널 바인딩 할 때 if let 변수명 = (nil값대입) 시 false를 반환하는 이유가

변수나 상수는 nil를 넣을 수 없는데 넣으려고해서 값이 안들어간 상태라 false가 나오는 원리가 맞나요?

guard문을 공부하다가  질문이 생겼습니다.

왜 옵셔널 바인딩 할 시 if var 변수명으로 쓰지않고 if let 변수명 으로만 바인딩하나요?

또 guard let 변수명 = 조건 else{

}  대신

guard var 변수명 = 조건 else{

}

이런식으로 let대신 var를 쓰지 않는 이유가 궁금합니다.

답변 1

답변을 작성해보세요.

1

 

안녕하세요.

 

if let 문법은 if문법과 매우 유사합니다.

 

if 조건 {

  조건 만족시 실행

}else{

  조건 불만족시 실행

}

아시겠지만 위와같이 if문은 조건이 만족하는가에 대한 부분으로 분기처리 됩니다.

 

if let도 마찬가지 입니다.

 

질문하신

if let 변수명 = (nil값대입) <- 이런 상황일 경우도 마찬가집니다.

단지 if let은 값을 가져올 수 있냐라고 조건이 잡히는 문법입니다. 

(nil 체크라는 표현으로 이해하는게 더 와닿겠네요.)

그리고 값을 가져올 수 있으면 optional을 벗겨내(unwrapping)서 값을 가지게 됩니다.

값을 가져올 수 없는 즉 값이없는(nil) 상태면 else가 있으면 else쪽이 실행되겠죠.

 

보통 아래와 같이 사용하겠죠 

if let xxxx {

  

}else{

  

}

if문 처럼 분기를 타는데

가져올 값이 있으면 바로 아래 괄호 내용으로 실행되고 아니면 else쪽으로 실행된다고 이해하시면 됩니다.

 

 

 

guard문법에서

guard var를 써도 됩니다.

 

guard var testVar = ....

이렇게 만들었다면 testVar에 값을 대입할 상황이 생기면 이렇게 사용해도 됩니다.

 

단지 testVar에 값을 대입할 상황이 없으면 let으로 사용하는 것이죠.

 

var로 선언했는데 사용하지 않으면 친절하게 

Value 'testVar' was defined but never used...

뭐 이런식으로 워닝문구가 보이게 됩니다.

 

정리하자면

 

if let

if var

guard let

guard var

 

모두 사용 가능합니다.

여기서 정의를 변수(var)로 할지 상수(let)로 할지만 상황에 맞게 정의하면 되는것이죠.