container.loadPersistentStores { description, error in
if let error = error {
fatalError("Failed to load persistent stores: \(error)")
}
}
위 코드에서 Closure 함수의 파라미터인 error 는 Error? 타입으로, Optional 타입이다. 그렇기에 error는 nil일 가능성이 있는데, 이를 체크하는 코드가 위와 같다.
이때, let error 의 error 는 if 블록 안에서만 사용되는 로컬 변수며, if let error = error 에서 if는 이 로컬 변수 error가 nil이 아닐 경우, true, nil 일 경우 false로 처리한다.
또한, if let error = error 일 경우, let error의 error 변수는 Optional 이 자동으로 벗겨지게 된다. 그래서, if 문 밖에서 그냥 let err = error 하면 err 는 똑같은 Error? 타입이지만, if let error = error 의 error는 explicit 한 Error 타입으로 변경된다.
즉, if let error = error {} 구문은 아래 코드를 축약해놓은 것이라고 할 수 있다.
if error != nil {
let error = error!
}
그래.. 매번 저 코드 쓰는게 짜증나고 열받는 일이라는건 알겠는데, 그래도 Syntactic sugar 너무 많다... ㅠㅠ