본 Lecture Note는 yagom.net의 '스위프트 기초' 강의를 수강하고 작성하였습니다.
Collection
타입은 여러 값들을 묶어서 하나의 상수나 변수로 다룰 수 있도록 도와주는 타입입니다.
Array
순서(인덱스)가 있는 리스트 컬렉션 타입입니다. 배열이라고도 부릅니다.
var integers: Array<Int> = Array<Int>() // [] 빈 배열 생성
integers.append(1) // [1]
integers.append(100) // [1, 100]
integers.append(100.1) // 에러 발생! Int Array에 Double을 할당할 수 없습니다.
integers.contains(100) // true (배열이 100을 가지고 있는가?)
integers.contains(99) // false (배열이 99를 가지고 있는가?)
integers.remove(at: 0) // 1 반환 (0번 인덱스의 요소 삭제)
integers.removeLast() // 100 반환 (마지막 요소 삭제)
integers.removeAll() // 모든 요소 삭제
integers.count // 0 (integers 배열의 요소 개수)
integers[0] // 에러 발생! 없는 요소에 접근하려고 하면 잘못된 접근으로 인해 프로그램이 강제 종료됩니다.
// Array<Double>과 [Double]은 동일한 표현입니다.
var doubles: Array<Double> = [Double]()
var strings: [String] = [String]()
var characters: [Character] = []
// let을 사용하여
let을 사용하여 Array를 선언하면 불변 Array가 됩니다.
let immutableArray = [1, 2, 3]
immutableArray.append(4) // 에러 발생! 상수로 선언되었으므로 요소 추가가 불가능합니다.
Dictionary
키(key)와 값(value)의 쌍으로 이루어진 컬렉션 타입입니다. 해시맵과 유사합니다.
// Key가 String 타입이고 Value가 Any인 Dictionary 생성
var anyDictionary: Dictionary<String, Any> = [String: Any]()
anyDictionary["someKey"] = "value" // ["someKey": "value"]
anyDictionary["anotherKey"] = 100 // ["anotherKey": 100, "someKey": "value"]
anyDictionary["someKey"] = "dictionary" // someKey 키의 값을 바꾸고 싶으면 이렇게 할당합니다.
anyDictionary["someKey"] = nil // 특정 키의 값을 없애고 싶을 때는 nil을 할당합니다.
anyDictionary.removeValue(forKey: "anotherKey") // 키의 값이었던 100 반환 (특정 키를 삭제할 수 있습니다.)
let emptyDictionary: [String: String] = [:] // 빈 Dictionary 생성
let initializedDictionary: [String: String] = ["name": "Ryan", "gender": "male"]
let someValue: String = initializedDictionary["name"] // 에러 발생! name 키에 해당하는 값을 someValue에 할당하고자 하였더니 실패하였습니다.
// 이는 name의 값을 가져올 때 값이 있을 수도, 없을 수도 있음을 고려하였기에 일어난 일입니다.
// 향후 optional 개념의 학습을 통해 실패 이유를 알 수 있습니다.
Set
순서가 없고 멤버가 유일한 컬렉션입니다. 수학의 집합 개념과 유사합니다.
// Set는 축약형 문법이 없습니다.
var integerSet: Set<Int> = Set<Int>() // Set([])
integerSet.insert(1) // {1}
integerSet.insert(100) // {100, 1}
integerSet.insert(99) // {1, 100, 99}
integerSet.insert(99) // {1, 100, 99}
integerSet.insert(99) // {1, 100, 99}
integerSet.contains(1) // true
integerSet.contains(2) // false
integerSet.remove(100) // 100 반환
integerSet.removeFirst()
integerSet.count // 1
let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]
let union: Set<Int> = setA.union(setB) // {2, 4, 5, 6, 7, 3, 1}
let intersection: Set<Int> = setA.intersection(setB) // {5, 3, 4}
let subtracting: Set<Int> = setA.subtracting(setB) // {2, 1}
let sortedUnion: [Int] = union.sorted() // [1, 2, 3, 4, 5, 6, 7]