====
개인적으로 공부한 것을 까먹지 않으려고 작성
교재: 스위프트 프로그래밍 3판
====
4장 데이터 타입 고급
스위프트는 타입에 굉장히 엄격
데이터교환하려면 타입캐스팅 반드시 해야함
특정타입 명시하지 않아도 컴파일러가 알아서 타입추론함
typealias 로 타입별칭 가능 typealias myint = int (C언어 typedef int myint)
튜플 자료형
-지정된 데이터의 묶음 이라고 보면됨 파이썬의 튜플 자료형과 비슷
-따로 키워드가 없어 사용하기 불편, 타입 별칭으로 사용함
컬렉션 자료형
-배열
그냥 배열 C언어와 다르게 크기가 고정된게 아니라 필요에 따라 버퍼를 늘이고 키울 수 있음 요소의 삽입 삭제가 자유로움.
var arr: Array<String>
var arr: [String]
first, last 로 해당 요소 알수이씅
요소의 인덱스 알아오기 index(of: ) 없으면 nil 반환
뒤에 요소 삽입 append(_ at: )
중간에 요소 삽입 insert(_: at: )
요소 삭제 remove(at:)
*다른 언어에 비해 사용할수있는 메소드가 풍부
-딕셔너리
key, value가 pair
key는 중복해서 사용 할 수없음
//빈 딕셔너리 생성
var dict: Dictionary<String, Int> = Dictionary<Sting, Int>()
// 동일한 표현
var dict: [String: Int] = [String: Int]()
없는 key로 접근해도 에러가아닌 nil을 돌려줌
- 세트
데이터를 순서없이 하나의 묶음으로 저장
중복된 값이 존재 하지 않음
순서가 중요하지 않거나 각 요소가 유일한 값
해시 가능한 값
Set 키워드와 타입의 조합으로 선언 가능한데 축약형이 없음
var exSet: Set<String> = Set<String>()
var exSet: Set<String> = []
요소추가 insert(_:)
요소삭제 remove(_:)
세트 내부의 값이 유일함을 보장하기 때문에 집합관계를 표현할때 유용하게 쓰임
* 컬렉션에서 임의의 요소 추출과 뒤섞기
shuffle(), randomElement()
(이런걸 만들어뒀다고??? C를 주력으로 하던 나에게 Swift는 매우 재미있는 언어인듯)
- 열거형(Enum)
제한된 선택지만 주고플 때, 정해진 값만 입력받을 때, 예상되는 입력이 한정될 때
C와는 다르게 각 항목이 그 자체로 고유 값이 될 수 있음
enum Apple {
case iPhone
case iPad
case appleWatch
}
enum Apple{
case iPhone, iPad, appleWatch
}
원시 값
특정 타입으로 지정된 값 가질 수 있음
rawValue 라는 property로 가져올 수 있음
enum Apple: String{
case iPhone = "아이폰"
case iPad = "아이패드
case appleWatch = "애플워치"
}
print(Apple.iPhone.rawValue) //아이폰
연관 값
기존 언어들의 공용체 형태라는데
enum내의 enum 이라고 설명해야하나..
항목 순회
열거형에 포홤된 모든 케이스 검색
CaseIterable protocol 채택(protocol 개념은 뒷장에 나온다함)
allCases 라는 property를 사용하여 모든 케이스를 알아냄
다만 복잡한 열거형(available 속성을 갖는경우, 연관값을 갖는경우) 에는 직접 allCases property를 구현해야함..
순환 열거형
열거형 항목의 연관 값이 자신의 값이고자 할 때 사용
indirect 키워드를 명시하면 됨
indirect enum ex {
case _
case __
}