티스토리 뷰

swift

[swift] Collection Type - Dictionary

순진이 2021. 12. 8. 17:54

Array에 이어 생각보다 많이 쓰고 있는 Dictionary에 대해 좀 정리해볼게요.

문법 강의만 들을 때는 이걸 어디다가 쓰지,,,했는데 엄청 쓰네,,,

그래서 알아본 

 

Dictionary는 키와 값의 짝으로 이루어진 배열이에요.

처음보는 스탈이라 처음에는 낯설었지만, 쓰다보면 익숙해지더라구여!

 

 

이렇게 말이져?

var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

key : "YYZ", "DUB"

value : "Toronto Pearson", "Dublin"


 

Dictionary

 

 

 

모든 키들은 같은 타입이어야하구요, 마찬가지로 모든 밸류들도 같은 타입이어야 합니다.

key는 중복이 불가능(유일한 값)해요! (value는 중복 가능)

[ ](대괄호) 문법 (subscript)을 쓰며,

순서는 상관없어여! (키로 구별하기 때문에)

 

 

옥께이!?

 

 

노 오께이,, 다시 정리해봅니다.

 

 

 

딕셔너리 접근하기

딕셔너리에 접근하는 방법은 배열과 유사합니다. 바로 서브스크립트 문법을 사용하면 되거등여.

키 값은 유일한 값이기 때문에 접근할 때는 키 값을 [ ]안에 넣어서 접근해야 해요.

마치 키 값을 통해 검색하는 것처럼 말이져?!

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]
                        
responseMessages[200] // Optional("OK")

그리고 해당값에 접근했을 때, 값이 없을수도 있겠져?

그렇기 때문에 값은 Optional값으로 나온답니다.

 

사용을 원할 때는 옵셔널 바인딩을 통해서 옵셔널 값을 벗겨낸 후 사용해야겠쥬?

 

 

 

 

빈 딕셔너리 만들기

일단 빈 배열 만들기와 매우 유사쓰!

타입만 [타입:타입]으로 표시해주면 됩니당.

var emptyDictionary1: Dictionary<Int, String> = [:]
var emptyDictionary2: [Int: String] = [:]
var emptyDictionary3 = Dictionary<Int, String>()
var emptyDictionary4: [Int: String] ()

 

빈 배열은 타입 추론이 안되기 때문에 반드시 타입을 명시해주어야 한다는 점! 잊지 말것,,,

 

 

 

딕셔너리에 요소 삽입/추가/교체하기

딕셔너리에 요소를 추가하려면 대괄호 문법(subscript)을 사용하면 됩니다.

Dictionary[key] = value를 통해 삽입/추가가 가능한데요. 해당 키에 대한 값을 value로 하겠다!라고 생각하면 됩니다.

var responseMessages = [Int: String]()

// Dictionary[key] = value
responseMessages[200] = "OK"
responseMessages[403] = "Access forbidden"
responseMessages[404] = "File not found","
responseMessages[500] = "Internal server error"]


print(responseMessages) 
// [200: "OK", 403: "Access forbidden", 404: "File not found", 500: "Internal server error"]

 

동일한 방법으로 교체도 가능해요.

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]
                        
responseMessages[404] = "Not found"

print(responseMessages)
// [200: "OK", 403: "Access forbidden", 404: "Not found", 500: "Internal server error"]

 

딕셔너리의 요소를 교체할 때는 updateValue(_:forKey:) 메서드를 사용할 수도 있습니당.

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]
                        
responseMessages.updateValue("No Error", forKey: 200)

print(responseMessages)
// [200: "No Error", 403: "Access forbidden", 404: "Not found", 500: "Internal server error"]

 

 

딕셔너리의 요소 삭제하기

딕셔너리의 특정 요소를 삭제할 때는 추가/삽입/교체와 똑같습니다.

특정 키에 해당하는 값에 nil을 부여해주시면 됩니다.

var responseMessages = [200: "No Error",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]
                        
responseMessages[500] = nil

print(responseMessages)
// [200: "No Error", 403: "Access forbidden", 404: "Not found"]

 

 

 

딕셔너리 기본 기능

배열과 같이 딕셔너리도 기본적인 기능이 있어요.

isEmpty를 통해 빈 배열인지, count를 통해 배열의 요소의 갯수를 알려줍니다.

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]

// 배열이 비었는지 확인하는 메서드
responseMessages.isEmpty // false

// 배열 갯수를 확인해주는 메서드
responseMessages.count // 4

 

 

 

딕셔너리의 키와 값에 대한 기능

딕셔너리의 경우, 키와 값으로 이루어진 배열이기 때문에 이와 관련된 기능도 있답니다!

keys라는 속성으로 딕셔너리의 키에만 접근이 가능해요.

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]
                        
for k in responseMessages.keys {
    print(k)
}
// 200
// 403
// 404
// 500

 

values라는 속성으로 딕셔너리의 값에만 접근이 가능해요.

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]
                        
for k in responseMessages.values {
    print(k)
}
// "OK"
// "Access forbidden"
// "File not found"
// "Internal server error"

 

'swift' 카테고리의 다른 글

[swift] Singleton 알아보기  (0) 2022.03.14
[swift] Result Type 알아보기  (0) 2022.02.03
[swift] 고차함수 1 - map  (0) 2021.12.28
[swift] CaseIterable protocol  (0) 2021.12.11
[swift] Collection Type - Array  (0) 2021.12.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크