티스토리 뷰
[데이터 타입 안심]
- Swift는 타입에 매우 엄격하고 민감하여 서로 다른 타입끼리의 데이터 교환 시 반드시 타입 캐스팅을 거쳐야 함
- 엄밀히 말하여 새로운 인스턴스를 생성하여 할당하는 것
- Swift는 서로 다른 타입의 값을 할당하면 컴파일 오류를 내므로 실수를 줄일 수 있음
[타입 별칭]
- typealias 키워드 사용
1 2 3 | typealias int = Int let number: int = 42 let number2: Int = 42 | cs |
[튜플 Tuple]
- 지정된 데이터의 묶음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let person: (String, Int, Double) = ("noname", 742, 142.3) person.0 //"noname" person.1 //742 person.2 //142.3 //기본적으로 튜플의 각 요소는 인덱스로 표현함 //간편하지만 각 요소가 어떤 의미가 있는지 유추하기 힘듬 let person2: (name: String, age: Int, height: Double) = ("noname2", 852, 791.3) person2.name //"noname2" person2.age //852 person2.height //791.3 person2.0 //"noname2" //튜플 요소의 이름을 명시하여 이름으로 값에 접근 //물론 여전히 인덱스를 사용하여 값에 접근 가능 | cs |
- 컬렉션 타입이 아님
[컬렉션 타입 - 배열 Array]
- 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입
- 각기 다른 위치에 같은 값이 들어갈 수도 있음
- 대괄호로 값을 묶어 Array 타입임을 표현할 수 있음
- 요소의 삽입 및 삭제가 자유로움
1 2 3 4 | let array: Array<Int> = [1, 2, 3, 4, 5] let array2: [Int] = [6,7,8,9] let emptyArray1: [Int] = [] //Int형 요소를 담을 수 있는 빈 배열 생성 let emptyArray2 = [Int]() //Int형 요소를 담을 수 있는 빈 배열 생성 | cs |
- 배열 관련 여러 가지 메서드와 프로퍼티
: first : 배열의 맨 처음 요소 반환
: last : 배열의 맨 마지막 요소 반환
: count : 배열 요소 수 반환
: isEmpty : 빈 배열인지 확인
: index(of:) : 해당 요소의 인덱스 확인
: append(_:) : 배열의 맨 뒤에 요소 추가
: insert(_:at:) : 해당 인덱스에 요소 추가
: remove(at:) : 해당 요소의 요소 삭제
: removeAll() : 모든 요소 삭제, 빈 배열로 만듦
[컬렉션 타입 - 딕셔너리 Dictionary]
- 순서 없이 키와 값의 쌍으로 구성되는 컬렉션 타입
- 키는 중복될 수 없음, 키는 값을 대변하는 유일한 식별자
- 대괄호로 키와 값의 타입 이름을 쌍으로 묶어 딕셔너리 타입임을 표현
1 2 3 4 | let dictionary: Dictionary<String, Int> = ["Hi": 3] let dictionary2: [String: Int] = ["Hi": 4, "Hello": 5] let emptyDictionary: [String: Int] = [:] //String 타입 키, Int 타입 값을 갖는 빈 딕셔너리 생성 let emptyDictionary2 = [String: Int]() //String 타입 키, Int 타입 값을 갖는 빈 딕셔너리 생성 | cs |
- 각 값에 키로 접근
- 내부에 없는 키로 접근하면 nil을 반환
- 딕셔너리 관련 여러 메서드와 프로퍼티
: isEmpty : 빈 딕셔너리인지 확인
: count : 딕셔너리 요소 개수 확인
: removeValue(forKey:) : 특정 키에 해당하는 값을 제거
[컬렉션 타입 - 세트 Set]
- 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입
- 세트 내의 값은 모두 유일하고 해시 가능(Hashable 프로토콜을 준수)한 값
: Swift의 기본 데이터 타입은 모두 해시 가능한 값
- 축약형이 없어 Set<Int>와 같이 써서 초기화함
- 배열과 같이 대괄호를 사용하며 때문에 타입 지정을 해주지 않으면 배열로 타입 추론됨
- 집합 관계를 표현하고자 할 때 유용하기 사용됨
1 2 3 | let set: Set<Int> = Set<Int>() let set2: Set<String> = [] let set3: Set<Int> = [2,6,1,2,3,4,2,4,2] //{2, 4, 6, 3, 1} | cs |
[열거형]
- 연관된 항목들을 묶어서 표현할 수 있는 타입
- 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가능
: 제한된 선택지를 주고 싶을 때
: 정해진 값 외에는 입력받고 싶지 않을 때
: 에상된 입력 값이 한정되어 있을 때
- 항목별로 값을 가질 수도, 가지지 않을 수도 있으며, 각 항목이 그 자체로 고유의 값이 될 수 있음
- 원시 값(Raw Value) : 각 항목이 실제 값을 가질 수 도 있음
- Optional은 열거형으로 구현되어 있음
1 2 3 4 5 6 7 8 9 | enum Method{ case subway case address case random } //각 항목은 그 자체가 고유의 값 var method: Method = Method.subway method = .address | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | //원시 값 지정 : 먼저 열거형의 타입을 지정 enum Method: String{ case subway = "지하철" case address = "주소" case random = "랜덤" } //각 항목은 그 자체가 고유의 값 Method.address.rawValue //"주소", String 타입 Method.address //address, Method 타입 Method(rawValue: "지하철") //원시 값으로 열거형 타입 변수 생성 가능, subway (Method 타입) | cs |
1 2 3 4 5 6 7 8 9 10 | //연관 값 : 열거형 내의 항목이 자신과 연관된 값을 가질 수 있음 enum Method{ case subway(line: String) case address(city: String) case random(index: Int) } let what = Method.subway(line: "인천4") | cs |
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 | //순환 열거형 : 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용 //indirect 키워드 사용 indirect enum ArithmeticExpression{ case number(Int) case addition(ArithmeticExpression, ArithmeticExpression) case multiplication(ArithmeticExpression, ArithmeticExpression) } let five = ArithmeticExpression.number(5) let four = ArithmeticExpression.number(4) let sum = ArithmeticExpression.addition(five, four) let final = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2)) func evaluate(_ expression: ArithmeticExpression) -> Int { switch(expression){ case .number(let value): return value case .addition(let left, let right): return evaluate(left) + evaluate(right) case .multiplication(let left, let right): return evaluate(left) * evaluate(right) } } let result: Int = evaluate(final) | cs |
'Swift > 야곰의 스위프트' 카테고리의 다른 글
6장 흐름 제어 (0) | 2018.01.29 |
---|---|
5장 연산자 (0) | 2018.01.29 |
3장 데이터 타입 기본 (0) | 2018.01.29 |
2장 스위프트 처음 시작하기 (0) | 2018.01.29 |
1장 스위프트 (0) | 2018.01.29 |