-많은 데이터를 묶어 저장,관리하는 타입
- 아래 컬렉션 형 모두 let으로 선언 시 변경 불가, var -> 변경 가능
- 아래 컬렉션 형 모두 isEmpty프로퍼티, count프로퍼티 사용 가능!
Dictionary와 Set은 삭제시, 값을 반환해준다. key혹은 해당 원소가 없어도 오류 없이 nil을 반환. 즉, 값이 있어도 Optional타입으로 리턴!
추가 | 삭제 | 조회 | |
배열 | arr.append("원소") | arr.removeFirst(), arr.removeLast() | arr[1], arr[2].. |
딕셔너리 | dict["key"] = "원소 | dict.removeValue(forKey:"key") (없으면 nil을 반환할 뿐 오류 X ) | dict["key"] (없어도 nil을 반환. 오류 X ) |
Set | set.insert("원소") | set.remove("원소") (없어도 nil을 반환할 뿐 오류 X) | . |
컬렉션에서 무작위로 원소를 뽑는 shuffle(), shuffled(), randomElement()등이 있는데, 코딩테스트에서는 쓸 일이 없을 것으로 보이며, 개발에서는 가끔 쓰일 수 있을 것 같다.
Swift의 배열은 버퍼(Buffer)이다.
버퍼의 크기 조절이 가능하므로, 삽입, 삭제 자유롭다!
## Swift배열 초기화
- 주요 프로퍼티
1. arr.isEmpty -> 비어있는지 여부 Bool형태로 리턴
2. arr.count -> arr의 길이 return
3. arr.index(of: 원소) -> 찾고자하는 "원소"의 맨 앞 index를 Optional타입으로 리턴 ==> Deprecated!!
대신 firstIndex(of:)와 lastIndex(of:)를 사용하자
4. arr.append(원소) -> 원소 추가
4-1. arr.append(contentsOf: [...], at: 인덱스) -> 여러개 원소 추가 가능
5. arr.insert(원소, at: 인덱스) -> 해당 index에 "원소" 추가
6. arr.insert(contentsOf: [....], at: 인덱스) -> 해당 index에 여러원소 추가
7. arr.remove(at: index)
8. arr.removeFirst(), arr.removeLast() -> 맨 앞 혹은 맨 뒤 원소를 삭제
9.배열 슬라이싱
10. 배열 마지막 원소를 가져올 때 애먹은 경우가 있었다. last, first 프로퍼티로 가능!! (옵셔널 언래핑 해줘야함!)
## Swift 딕셔너리 초기화
- 빈 딕셔너리를 생성해주려면 type을 정확히 명시해야한다!
## Swift 딕셔너리 원소 제거
- 파이썬의 딕셔너리와 비슷하다.
- 다른 점은 del dict["key"]를 dict.removeValue(forKey: "key")로 하면서 값을 반환해준다.
## Swift 딕셔너리 원소 조회
- default를 지정할 때는, 원래의 Dictitionary의 value와 같은 타입으로만 지정 가능하다
- 파이썬의 set와 비슷하다! ( 같은 원소는 set에 단 하나만 존재 가능)
## Swift 딕셔너리 초기화
- 빈 딕셔너리를 생성해주려면 type을 정확히 명시해야한다!
- 축약형이 없다!!! ( Array[Int]를 [Int]로 표시하는 것과 같은 축약형..)
- Array와 같이 [] 대괄호를 사용하므로, 타입명시를 꼭 해주어야한다!
- 주요 메서드
-insert("원소")
-remove("제거할 원소") -> 값을 반환해줌
- set1.intersection(set2) => 교집합
- set1.union(set2) => 합집합
- set1.subtracting(set2) => 차집합
- set1.symmetricDifference(set2) => 배타적 논리합
- set1.sorted() => set내의 원소들을 정렬하여 Array로 리턴!
- 제한된 선택지만 주고 싶은 경우에 사용
- Swift의 열거형은 고유의 타입으로 인정 -> 버그 가능성 원천 봉쇄
- 원시값(Raw Value) 혹은 연관값(Associated Value)을 가질 수 있다.
## type
- type은 열거형 항목이 아닌 열거형 이름인 것을 확인할 수 있다.
## 열거형의 원시값
- 열거형 이름 옆에 "원시값" 타입 지정
- rawValue 프로퍼티로 사용
## 원시값을 이용한 초기화
- 원시값으로 열거형 항목을 초기화해줄 수 있다.
## 열거형의 항목 순회
- CaseIterable 프로토콜을 채택하면 allCases프로퍼티로 모든항목이 포함된 배열을 얻을 수 있다.
## 열거형의 연관값
- 열거형 내의 항목이 자신과 연관된 값을 가질 수 있다.
- 마치 열거형 항목이 Class혹은 구조체이며, 그 안의 멤버변수 혹은 프로퍼티가 생기는 것과 같다.
- 연관값을 가지면 원시값을 가질 수 없고, CaseIterable프로토콜도 따를 수 없다!!!
- 0. 부동소수점의 나머지 연산도 지원한다!! ( 다른 언어들에서는 보통 정수만 지원 ) -> ( Float끼리, Double끼리 가능 -> Float과 Double 불가능, Float과 Int 불가능 )
% 연산자는 Int형에서만 가능!!
이외에는 (Int혹은 부동소수점 타입).truncatingRemainder(dividingBy: 2.5)
- 1. A === B ( !==도 마찬가지 )
A와 B가 참조타입인 경우, A와 B가 같은 인스턴스를 가리키는지 Bool값 return
( Swift의 기본 데이터 타입은 모두 구조체로 구현. 따라서 값타입 )
- 값의 비교연산에는 ==,
- 참조타입의 비교연산에는 ===
를 사용한다!!
- 2. 범위 연산자
a...b => a부터 b까지 (a와 b포함)
a..<b => a이상 b미만
- 3. nil병합 연산자
A ?? B => A가 nil이 아니면 A를 반환하고, A가 nil이면 B반환
- 4. 옵셔널 강제 추출 연산자
A! => Unwrapping하여 강제추출
- 5. 옵셔널 연산자
A? => A의 값을 안전하게 추출하거나, A가 옵셔널 타입임을 표현
- 6. 오버플로 연산자
오버플로를 대비하여 연산을 해줌 ( UInt8의 경우 255 &+ 1 ==> 0이 됨 )
&+
&-
&*
ex)let value = UInt8.max &+ 1
value ==> 0
Swift언어6 - 함수형 프로그래밍_클로저 (0) | 2022.10.01 |
---|---|
Swift언어 복습노트 5 - 구조체와 클래스 그리고 instance(작성중) (0) | 2022.09.10 |
Swift언어 복습노트 4 - 함수와 Optional (1) | 2022.09.10 |
Swift언어 복습노트 3 - 흐름제어 in Swift (0) | 2022.09.10 |
Swift언어 복습노트1 - data type (0) | 2022.05.21 |