초기화 과정 중에 실패할 가능성이 있는 이니셜라이저로, init뒤에 물음표(?)를 표기하여 사용할 수 있습니다. 초기화 과정 중에 실패할 경우 nil을 반환합니다.
struct SomeData {
let id: Int
let name: String
let description: String
init(id: Int, name: String, description: String){
self.id = id
self.name = name
self.description = description
}
// 실패 가능한 이니셜라이저
init?(dic: [String : Any]){
guard let id = dic["id"] as? Int,
let name = dic["name"] as? String,
let description = dic["description"] as? String
else {
return nil
}
self.init(id: id, name: name, description: description)
}
}
네트워킹 요청 중에 response 데이터가 dictionary로 내려올 때가 있는데, dictionary를 파싱하여 객체의 인스턴스를 만들 때 사용하면 유용하다.
예를 들어, 네트워킹 코드 중 아래와 같이 response로 받은 Dictionary 데이터를 SomeData로 바꾸고 싶을 때
이렇게 사용해도 되지만
아래와 같이 실패가능한 이니셜라이저를 사용하면
깔끔한 코딩이 가능하다.