Swift

Array의 index를 안전하게 처리하는 방법

zinozino 2023. 4. 18. 20:50

Sequence Protoocol을 따는 Collection Protocol은 Indexing에 관한 프로토콜입니다. Dictionary 또한 Collection protocol을 따르고 있습니다.

그렇기 때문에 Array에서 잘못 인덱스를 접근하는 것을 방지하기 위해서는 Collection Protocol로 접근하는 것이 좋습니다.

extension Collection {
    subscript(safe index: Index) -> Element? {
		if self.indices.contains(index) {
			return self[index]
		}
	return nil
    }
}

indices라는 Collection프로토콜의 속성은 해당 컬렉션의 모든 인덱스를 Collection으로 반환합니다.

해당 index가 포함되어 있는지 확인 후 있다면  Array의 Element(Generic) 반환하고, 없다면 nil을 반환합니다.

 

 

추가


※ Array를 확장한다면 더 높은 성능을 보여줄 수 있습니다. (하리 댓글을 보고 추가합니다.)

 

extension Array {
	subscript(optional index: Int) -> Element? {
    	if 0..<indices.count ~= index {
        	return self[index]
        }
        return nil
    }
}

 

10 -5승이니   0.000018   < 0.0002 이므로 훨씬 빠릅니다.