Skip to content

Instantly share code, notes, and snippets.

@monadis
Last active December 29, 2016 11:47
Show Gist options
  • Save monadis/f8e3b9d3bb7fd16161e10666aa205fec to your computer and use it in GitHub Desktop.
Save monadis/f8e3b9d3bb7fd16161e10666aa205fec to your computer and use it in GitHub Desktop.
Swift 언어 - if let 문법

if 문의 조건부에 let을 사용하는 이유

var optionalName: String? = getStringFromSomewhere()
var names :[String] = []
if optionalName {          // 값이 존재하는지 테스트를 해줘야 함.
     names += optionalName    // 에러 발생. !를 적어 unwrap해야 함.
} else {
 //... 
}

이처럼 String과 String? 의 차이가 문제시되는 코드가 있다. 즉, optional type을 다룰때는 항상 값 존재여부 테스트 및 unwrapping문제가 따라다님. 이 두문제를 한꺼번에 해결하는 문법이 아래와 같다.

var names :[String] = []
if let name = getStringFromSomewhere() {
     names += name
} else {
 //...
}

name이라는 non-optional변수가 생겨났고 optionalName이라는 옵셔널 변수가 사라졌다. 즉, if let 문법을 사용하면 옵셔널 변수를 줄일수 있게 되는 것이다. name이 가변적일 경우 let 대신 var를 써도 상관없다.

if let a = b.c {
  a.d()
}

// 위는 아래와 같이 바꿔 쓸 수 있다.

b.c?.d()
if let data = widget.dataStream {
	if data.isValid {
		if let source = sourceIP() {
			if let dest = destIP() {
				// do something
			}
		}
	}
}

// 위와 아래는 동일하다.

if let data = widget.dataStream, data.isValid, let source = sourceIP(), let dest = destIP() {
	// do something
}
if (age > 17 && profile.public) {
  if let first = user.first {
    if let last = user.last {
      return "\(first) \(last)"
    }
  }
}

// 위의 nesting구조를 아래처럼 컴마로 연결해서 쓸수있다.

if age > 17 && profile.public, let first = user.first, last = user.last {
    return "\(first) \(last)"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment