티스토리 뷰
Accessing Individual Elements
컬렉션 내 개별적인 값 접근하기
Collection프로토콜을 채택한 컬렉션들의 요소는 특정 위치의 인덱스를 통해 접근할 수 있습니다. 딱 하나 예외적으로, collection의 endIndex 프로퍼티를로는 값을 접근할 수 없습니다.
"endIndex는 값의 인덱스가 아닌 컬렉션의 끝을 지나간 인덱스"로, 어떠한 컬렉션의 값과도 대응되지 않습니다.
아래의 경우 특정 문자열의 맨 처음 인덱스 Character 문자를 출력하는 코드입니다.
위의 코드를 보시면, String 문자열인 text를 선언하고, text의 맨 첫 인덱스를 가리키는 String.index타입의 text.startIndex를 startIndex에 저장하고 있습니다. 해당 인덱스를 통해 문자열은 배열 접근하듯 첨자 접근하여 문자를 탐색할 수 있습니다.
text[startIndex]의 값을 firstCharacter에 할당하며 그 값은 맨 첫 문자인 "H"가 됩니다.
Collection 프로토콜은 배열의 인덱스 첨자 접근 하듯, 그들의 인덱스 첨자를 통해서 값을 접근하는 것에 기반한 많은 연산을 제공하며 이들에 대한 기본적인 기능들을 선언 및 제공하고 있습니다.
예를들면, first 프로퍼티를 통해 컬렉션의 맨 처음 값을 접근할 수 있습니다. 다만, 첫번째 값이 존재하지 않을 수도 있기 때문에(컬렉션이 비어있는 경우) nil이 될 수 있는 옵셔널 타입(Character?)으로서 반환됩니다.
import UIKit
let text = "Hello!"
print(text.first)
// prints "Optional("H")"
위의 코드는 first 프로퍼티를 활용하는 예시입니다. Optional 타입, Characer?를 반환하며, first값이 존재하므로 그 값에 Optional이 래핑 된 값을 반환하게 됩니다.
이처럼 컬렉션에 있는 특정 값을 접근하기 위해서는 해당 컬렉션의 계수 범위 내에서 접근을 해야 값을 얻을 수 있습니다.
접근 가능한 범위는 startIndex부터 endIndex 인덱스 까지의 유효한 후속 항목들을 찾고, 최종적으로 계수범위 내의 셋을 구할 수 있습니다.
이때 다른 타입을 가진 startIndex 같이 인덱스 타입이 다른 모든 경우에 경우에는 다른 타입의 컬렉션에 대해서 정상적으로 접근할 수 없습니다. 또한, 컬렉션이 변경되는 작업 간 특정 범위는 유효하지 않는 접근범위가 될 수 있습니다.
만약 변경가능한 컬렉션 내의 인덱스 무효화에 해단 더 많은 정보가 필요하다면, 당신이 사용하는 특정 타입에 대한 MutableCollection, RangeReplaceableCollection 프로토콜에 대해 알아보시기 바랍니다.
Accessing Slices of a Collection
컬렉션 부분 범위 접근하기
prefix(while:), suffix(_:) 메서드를 사용하거나, 범위 표현식을 첨자 접근에 사용하는 등의 방식으로 컬렉션의 부분범위 값을 접근할 수 있습니다. 또한 이렇게 접근 되어진 부분 범위 값들은 원본 컬렉션의 값들과 색인이 공유되어 다뤄집니다.(컬렉션 생성 이후 배열 값이 변경되지 않는 한)
아래의 예시는 prefix(while:) 메서드의 반환값으로 생성된 firstWord 상수를 출력하는 예시 코드입니다.
prefix(while:) 같은 메서드로 부분 범위 값을 얻을 수도 있지만, 그 이외에 범위 표현식을 통해서 특정 범위의 값들을 접근할 수 있습니다.
위의 코드는 firstIndex를 통해서 text 문자열의 첫 " " 문자가 있는 인덱스를 찾습니다.만약 해당 값이 존재한다면 해당 공백 앞의 문자 범위를 접근해서 그 문자열을 출력합니다.
결과적으로, 첫번째 단어를 출력하는 prefix(while:) 메서드 결과와 동일한 문자열을 출력합니다.
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
iOS swift 컬렉션의 요소 접근, 순회 등 특징 및 성능 (0) | 2020.06.28 |
---|---|
swift Collection, 원본 컬렉션 공유하는 Slices 활용법 (0) | 2020.06.23 |
iOS swift Collection, 컬렉션 프로토콜 개요 (0) | 2020.06.21 |
iOS swift Sequence, 시퀀스 프로토콜 사용법과 성능 (0) | 2020.06.20 |
iOS swift Sequence, 시퀀스 프로토콜 개요 및 특징 (0) | 2020.06.19 |
- Total
- Today
- Yesterday
- 프로토콜
- swift string
- CoreML
- swift알고리즘
- 스위프트
- publisher
- uikit
- ios
- Collection
- 백준swift
- swift 기초
- 알고리즘문제
- 컬렉션
- createML
- 부스트코스
- 프로그래머스swift
- 백준알고리즘
- swift언어
- 개발자문서
- swift문제
- swift 문자열
- Swift 알고리즘
- SwiftUI
- swift reduce
- 프로그래머스
- 김프매매
- 알고리즘
- 자연어처리
- Protocol
- swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |