[Swift] Collection - Dictionary

meredith·2022년 1월 4일
0

swift

목록 보기
6/8

Dictionary

Dictionary

: (key : value)로 짝지어 저장되는 값들의 모음

순서가 없는 collection
(실제로 print 해보면 일정한 순서대로 나오는 것 같지만, 순서를 보장하지 않는다.)

key: 중복 불가능
value: 중복 가능
dictionary 자체가 의미 단위로 저장하고 찾기 유용하기 위해 나온 collection이기 때문에 값을 찾는 데에 쓰이는 key가 중복되면 의미 구분이 불가능해진다.
따라서 key 값은 유니크 해야 한다.

또한, 애플의 swift는 자료형에 굉장히 민감하기 때문에 모든 key의 자료형은 같아야 하고, 모든 value의 자료형도 같아야한다.

선언 방법

// 방법 1
var meDictionary: [String: String] = ["name": "meredith", "city": "NY", "job": "student"]

// 방법 2
var meDictionary: Dictionary<String, String> = ["name": "meredith", "city": "NY"]

특정 값 변경

내가 만약 NY에서 L.A.로 이사를 갔다면?
나만의 dictionary에 "city" 값을 업데이트 해야한다.

meDictionary["city"] = "L.A."

특정 값 삭제

내가 나만의 dictionary에서 "job" 값을 없애고 싶다면 어떻게 해야할까?

아주 간단하다.
"job" 값에 nil을 넣으면 된다.

meDictionary["job"] = nil

그럼 "job"이라는 key도 함께 아예 사라진다.

하나의 값 반환

내가 만약 meDictionary에서 name에 해당하는 값을 새로운 변수에 저장한다면

let name = meDictionary["name"]

라고 코드를 짤 수 있다.

하지만, 여기서 name의 타입은 뭘까?
String?

정답은 Optional<String>이다.

이유는?
우리가 선언한 meDictionary에는 key값이 "name"이라는 값이 있지만, 없을 수도 있는 문제다.
없는 값을 반환시키면 (예를 들어 meDictionary["age"] 같은 경우) nil이 반환된다.
따라서, 반환은 Optional 값이 반환된다.

그래서 안정적으로 사용하기 위해서는 Optional Binding을 하고 사용한다.

// Dictionary를 parameter로 받아 이름과 도시를 출력하는 함수
func printNameAndCity(dic: [String: String]) {
  guard let name = dic["name"], let city = dic["city"] else {
    print("--> Cannot find")
    return
  }
  print("name: \(name), city: \(city))
}
profile
해보자고 가보자고

0개의 댓글