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 너무 많다... ㅠㅠ