딕셔너리란 [ 키 : 데이터, 키 : 데이터, ... ] 형식으로 저장되는 데이터다.
다음은 dictionary로 HTTP 응답 코드를 딕셔너리로 정리한 코드다.
var responseMessages = [200: "OK",
403: "Access forbidden",
404: "File not found",
500: "Internal server error"]
다음처럼 새로운 빈 dictionary를 만들 수 있다
var emptyDict: [String: String] = [:]
딕셔너리의 값 가져오기
print(responseMessages[200])
// Prints "Optional("OK")"
다음은 만약 responseMessages 딕셔너리에 값이 존재하면 if문 실행하고 딕셔너리에 값이 없으면 else 문을 실행하게 할 수 있다.
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")"
딕셔너리에 기존 key 에 value 값 수정
responseMessages[404] = "Not found"
responseMessages[500] = nil
print(responseMessages)
// Prints "[301: "Moved permanently", 200: "OK", 403: "Access forbidden", 404: "Not found"]"
수정 가능한 딕셔너리 인스턴스에서는 key를 통해서 값을 수정할 수 있다. 아래 코드에서는 String 키와 Int형 value인
interestingNumbers 라는 딕셔너리를 선언한 다음, 각 배열을 내림차순으로 정렬합니다.
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]"
딕셔너리의 값을 반복문을 통해 접근하기
모든 딕셔너리는 정렬되지 않은 key-value 형태로 되어 있다. 그리고 for-in loop문을 통해서 딕셔너리를 반복하여 사용할 수 있다
key-value 인 tuple 원소로 받아서 사용할 수 있다.
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'."
딕셔너리의 key-value 쌍의 순서는 mutations 사이에서 안정적이지만 그렇지 않으면 예측할 수 없다. 키-값 쌍의 정렬된 컬렉션이 필요하고 사전이 제공하는 빠른 key 조회가 필요하지 않다면, 대안을 위해 KeyValuePairs 유형을 참조한다.
contains(where:) 또는 firstIndex(where:) 메서드를 이용하여 딕셔너리의 contents를 찾을 수 있다. 다음 예제는 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.")
위에 예제에서는 imagePaths는 딕셔너리 index를 사용하여 묘사되었다. key-based
이 예에서 imagePaths는 사전 인덱스를 사용하여 subscript됩니다. 키 기반 subscript와 달리, 인덱스 기반 첨자는 해당 키-값 쌍을 선택 사항이 아닌 튜플로 반환합니다.
배열이나 딕셔너리 등의 콜렉션 타입을 쓰다보면 [index] 형태의 구문을 많이 쓰게 됩니다. 이러한 것을 Subscript(첨자) 라고 하며, Swift에서는 Subscript를 프로그래머가 이용할 수 있는 간편한 방법을 제공합니다.
print(imagePaths[glyphIndex!])
// Prints "(key: "star", value: "/glyphs/star.png")"
'SwiftUI' 카테고리의 다른 글
Definition of Protocols (0) | 2023.11.05 |
---|---|
Managing a Shared Resource Using a Singleton (0) | 2023.11.05 |
Range (0) | 2023.11.05 |
Memory Management (0) | 2023.11.05 |
Enumerations (0) | 2023.11.02 |