728x90
1. 개요
- 요소들이 순서없이 키와 값의 쌍으로 구성되는 타입
- 내부에 없는 키로 접근해도 오류 발생안함 nil을 반환
- 키가 하나이거나 여러개일수 있음
- 키는 유일한 식별자여야함. 중복 불가
- let으로 선언하면 변경 불가
- var로 선언하면 변경 가능
- 이니셜라이저 또는 리터럴 문법을 통해 생성
- isEmpty 프로퍼티를 통해 빈 딕셔너리인지 확인가능
- count 프로퍼티로 딕셔너리 요소 개수 파악 가능
2. 선언
Swift의 모든 기본 유형을 포함 하여 Hashable프로토콜 을 준수하는 모든 유형을 사전 Key유형 으로 사용할 수 있습니다
//HTTP 응답 코드 및 관련 메시지 사전
var responseMessages = [200: "OK",
403: "Access forbidden",
404: "File not found",
500: "Internal server error"]
//키-값 쌍이없는 사전을 만들려면 빈 사전 리터럴 ( [:])을 사용
var emptyDict: [String: String] = [:]
3. 딕셔너리 값 접근 및 값 할당
사전의 값에 액세스하는 가장 일반적인 방법은 키를 첨자로 사용하는 것
print(responseMessages[200])
// Prints "Optional("OK")"
위처럼 Optional로 값이 반환됨 왜냐하면 해당 키에 대한 값을 보유하지 않을 수 있기 때문.
예제) 사전에 존재하는 두 개의 키와 그렇지 않은 키가 있는 사전 의 키 기반 첨자를 사용
let httpResponseCodes = [200, 403, 301]
for code in httpResponseCodes {
if let message = responseMessages[code] {
//존재 할때
print("Response \(code): \(message)")
} else {
//존재 하지 않을때
print("Unknown response \(code)")
}
}
// Prints "Response 200: OK"
// Prints "Response 403: Access forbidden"
// Prints "Unknown response 301"
키를 통해서 값을 수정 또는 제거할수 있다.
responseMessages[301] = "Moved permanently"
print(responseMessages[301])
// Prints "Optional("Moved permanently")"
responseMessages[404] = "Not found" //404코드 값을 단순히 "Not found"으로 업데이트
responseMessages[500] = nil //500완전히 제거
print(responseMessages)
// Prints "[301: "Moved permanently", 200: "OK", 403: "Access forbidden", 404: "Not found"]"
예제) 문자열 키와 정수 배열 인 값을 사용하여 딕셔너리를 선언 한 다음 각 배열을 내림차순으로 정렬
var interestingNumbers = ["primes": [2, 3, 5, 7, 11, 13, 17],
"triangular": [1, 3, 6, 10, 15, 21, 28],
"hexagonal": [1, 6, 15, 28, 45, 66, 91]]
for key in interestingNumbers.keys {
interestingNumbers[key]?.sort(by: >)
}
print(interestingNumbers["primes"]!)
// Prints "[17, 13, 11, 7, 5, 3, 2]"
예제) for- in루프를 사용하여 key , value 에 접근
let imagePaths = ["star": "/glyphs/star.png",
"portrait": "/images/content/portrait.jpg",
"spacer": "/images/shared/spacer.gif"]
for (name, path) in imagePaths {
print("The path to '\(name)' is '\(path)'.")
}
// Prints "The path to 'star' is '/glyphs/star.png'."
// Prints "The path to 'portrait' is '/images/content/portrait.jpg'."
// Prints "The path to 'spacer' is '/images/shared/spacer.gif'."
예제) 디렉토리에 경로가 포함되어 있는지 확인
//imagePaths 딕셔너리에 접두사 /glyphs가 있는 처음으로 걸린 인덱스를 반환
let glyphIndex = imagePaths.firstIndex(where: { $0.value.hasPrefix("/glyphs") })
if let index = glyphIndex {
//인덱스가 존재한다면
print("The '\(imagePaths[index].key)' image is a glyph.")
} else {
//인덱스가 없다면
print("No glyphs found!")
}
// Prints "The 'star' image is a glyph.")
//키 기반 [key]와 달리
//인덱스 기반 [index]는 해당 키-값 쌍을 비 선택적 튜플로 반환
print(imagePaths[glyphIndex!])
// Prints "(key: "star", value: "/glyphs/star.png")"
'공부 > SWIFT' 카테고리의 다른 글
[SWIFT] 열거형 (enum) (0) | 2021.03.09 |
---|---|
[SWIFT] 컬렉션형 - 세트(Set) (0) | 2021.03.09 |
[SWIFT] 컬렉션형 - 배열 (Array) (0) | 2021.03.09 |
[SWIFT] 튜플(Tuple) - 프로그래머 마음대로 타입 (0) | 2021.03.09 |
[SWIFT] 데이터 타입 특징(타입안심, 타입추론, 타입별칭) (0) | 2021.03.09 |