
이 글은 https://bbiguduk.gitbook.io/swift 에 나오는 스위프트 문법을 공부하면서 새롭게 알게 된 지식들을 정리한 포스팅입니다.
Array 타입은 Foundation의 NSArray 클래스와 연결(Bridge)되어 있다.[]로 해당 타입의 빈 배열로 만들 수 있다.someInts.append(3)
someInts = []
Array 타입은 크기를 고정하여 기본 값을 할당하여 배열을 생성하는 초기화 함수를 포함한다.String 타입도 가능하다.var fiveZero = Array(repeating: 0, count: 5) // [Int] [0, 0, 0, 0, 0]
var fiveZeroString = String(repeating: "0", count: 5) // "00000"
var threeNine = Array(repeating: 9, count: 3)
var eightNumber = fiveZero + threeNine // [0, 0, 0, 0, 0, 9, 9, 9]
+=로 추가할 수 있다.var shoppingList = ["Egg", "Flower"]
shoppingList += ["Cheese", "Butter", "Baking Powder"]
shoppingList[0] = "Beaf"
shoppingList[1...3] = ["Apple", "Banana", "Candy", "Diamond"]
// ["Beaf", "Apple", "Banana", "Candy", "Diamond", "Baking Powder"]
insert(_:at:) : 배열의 특정 인덱스에 요소를 추가할 때 사용한다.at: 에 입력한 인덱스에 위치한 요소의 앞쪽에(=해당 인덱스에) 요소를 삽입한다.remove(at:) : insert와 비슷하게 동작하며, 차이는 삭제한 요소를 반환한다. (필요 없으면 무시)count - 1 등을 피하기 위해서 removeLast()를 사용하는 것이 낫다.shoppingList.insert("Strawberry Jam", at: 0)
var removedItem = shoppingList.remove(at: 0) // Strawberry Jam
print(shoppingList[0]) // Beef
var lastRemovedItem = shoppingList.removeLast() // Baking Powder
Int: 0부터 1씩 증가)와 값을 튜플로 조합하여 반환한다.for (index, value) in shoppingList.enumerated() {
print("Item \(index + 1) - \(value)")
}
Set 타입은 Fondation의 NSSet 클래스와 연결(Bridge)되어 있다.Int 값으로 해쉬 값이 동일하다면 동일한 객체이다.String, Int, Double, Bool)은 hashable → 집합과 딕셔너리 키로 사용가능.enum의 case 값도 hashable하며, 사용자 타입도 Hashable 프로토콜 준수하면 가능.a == b && a.hashValue == b.hashValue // true
var letters = Set<Character>()
var letters: Set<Character> = [] // 이것도 같다.
var genres: Set = ["Rock", "Classical", "Jazz"]
count, isEmpty 프로퍼티를 사용할 수 있다.insert(_:), remove(_:), removeAll(), contain(_:) 메서드를 사용할 수 있다.remove(_:)로 반환된 값이 nil일 수도 있기 때문에 Optional 타입 반환한다.Set 타입은 순서가 없지만, sorted() 메서드로 해당 타입 Array로 변환하여 정렬 가능하다.by: > 인자를 사용하여 오름차순 정렬도 가능하다.for genre in genres.sorted(by: >) {
print(genre)
}
type(of: genres.sorted()) // Array<String>
intersaction(_:) : 두 집합의 공통값을 가진 Set을 생성한다. → 교집합symmetricDifference(_:) : 두 집합의 공통값을 제외한 값들을 가진 Set을 생성한다. → 대칭 차집합union(_:) : 두 집합의 모든 값을 가진 Set을 생성한다. → 합집합subtracting(_:) : 인자로 전달한 집합과의 공통값을 제외한 값들을 가진 Set을 생성한다. → 차집합let oddDigits: Set<Int> = [1, 3, 5, 7, 9]
let evenDigits: Set<Int> = [2, 4, 6, 8]
let PrimeNumber: Set = [2, 3, 5, 7]
evenDigits.intersection(oddDigits) // []
evenDigits.union(oddDigits).sorted() // [1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.subtracting(PrimeNumber).sorted() // [1, 9]
oddDigits.symmetricDifference(PrimeNumber).sorted() // [1, 2, 9]
== 연산자를 사용한다.isSubset(of:) : 모든 값이 인자로 전달한 집합에 포함되어 있는지. → 부분집합isStrictSubset(of:) : 인자로 전달한 집합과 같지 않으면서 부분집합인지. → 진부분집합isSuperset(of:) : 인자로 전달한 집합의 모든 값을 포함하고 있는지. → 초집합isDisjoint(of:) : 두 집합 사이에 공통된 값이 있는지. → 분리집합let houseAnimals: Set<String> = ["Cat", "Dog"]
let farmAnimals: Set<String> = ["Hen", "Horse", "Dog", "Pig", "Cat"]
let cityAnimals: Set<String> = ["Mouse", "Crow"]
houseAnimals.isSubset(of: farmAnimals) // true
houseAnimals.isStrictSubset(of: farmAnimals) // true
farmAnimals.isSuperset(of: houseAnimals) // true
farmAnimals.isDisjoint(with: cityAnimals) // true
key와 같은 타입의 value를 저장한다.Hashable 프로토콜을 준수해야 한다.Dictionary 타입은 Foundation의 NSDictionary 클래스와 연결(Bridge)되어 있다.Dictionary<Key, Value> 형식으로 작성하며, [Key: Value] 와 같이 축약문법도 가능하다.let animals = [Character: String]()
let animals: [Character: String] = [:] // 이것도 같다.
var animals = ["🐶": "Dog", "🐱": "Cat", "🐦": "Bird", "🦁": "Lion"]
// 타입 추론 할 경우 Character가 아닌 String이 된다.
count, isEmpty 프로퍼티를 사용할 수 있다.animals["🐤"] = "Bird_MK2"
animals["🐤"] = "Little Bird"
updateValue(_:forKey:) 메서드를 사용하여 새로운 요소를 추가/변경할 수도 있다.nil을, 요소를 변경하는 경우에는 Optional(ex:String?) 반환한다.//animals["🐠"] = "???"
print(animals.updateValue("Egg", forKey: "🐠")) // nil -> 위 주석 해제하면 Optional("???")
if let oldValue = animals.updateValue("Fish", forKey: "🐠") {
print(oldValue) // Egg
} else {
print("There was no value for 🐠") // 새로 요소를 추가했을 경우 출력
}
Optional 반환한다.if let animal = animals["🐟"] {
print(animal)
} else {
print("There is no value for 🐟")
}
removeValue(forKey:) 메서드를 사용하여 키-값 쌍을 삭제할 수 있다.Optional을, 없을 경우에는 nil을 반환한다.nil을 할당하여 삭제할 수도 있다.animals["🐠"] = nil
if let removedAnimal = animals.removeValue(forKey: "🐠") {
print(removedAnimal)
} else {
print("There is no 🐠")
}
for-in 루프에서 각 아이템의 키-값 쌍을 (key, value) 튜플로 반환받을 수 있다.for (animal, name) in animals {
print("\(animal) = \(name)", terminator: " ")
}
// 🐱 = Cat 🐶 = Dog 🦁 = Lion 🐤 = Little Bird 🐦 = Bird
keys와 values 프로퍼티로 각 키와 값에 대한 Collection을 반환받을 수 있다.Array처럼 보이지만, Keys와 Values라는 별개의 Collection이다.Array로 캐스팅하여 사용할 수 있다.type(of: animals.keys) // Keys
type(of: Array(animals.values)) // Array<Stirng>
let animalNames = [String](animals.values)
// ["Little Bird", "Dog", "Cat", "Bird", "Lion"]