로아랑 어플을 만들면서 내가 원하는 형태로 정보를 가져오는게 아닌 공식 홈페이지에서 제공하는 javascript를 긁어 오다보니 배열의 index에 접근할 일이 많아졌다
아직까지는 index범위를 넘어가는 오류가 발생하지는 않았지만 오늘 또 새로운 기능을 구현 하던 중 문득 든 생각은 대부분의 캐릭터들은 정보의 위치가 동일 하겠지만 어쩌면 모든 캐릭터의 정보 위치가 일치 하지 않을 수도 있다라는 생각이 들었고 이렇게 안일하게 index처리를 하면 안될 것 같아서 index를 안전하게 처리하는 방법에 대해 공부했다
extension Collection {
subscript (safe index: Index) -> Element? {
return self.indices.contains(index) ? self[index] : nil
}
}
안전하게 접근하는 방법은 subscript로 받은 index가 해당 배열의 index에 포함되는지를 판단한 뒤에 포함이 된다면 해당 index에 해당하는 Element를 아니라면 nil값을 옵셔널 값으로 전달하는 것이다
(indices가 뭔가 했더니 index의 복수형이라는...)
위처럼 앞에 safe:
만 붙여 평소에 사용하듯이 사용해주면 된다 차이점이 있다면 옵셔널 값으로 나오게 되니 필요하다면 사용하는 곳에서 옵셔널 바인딩을 해주면 된다!