iOS/문법

Swift 문법과 친해지기 - Dictionary

HJ39 2022. 12. 26. 21:41

Dictionary

Dictionary는 swift를 사용할 때 매우 자주 사용하는 기능이다.

 

Dictionary 사용법

 

□ Dictionary 선언

// 빈 딕셔너리 선언
var dic2: [String: Int] = [:]
var dic3 = Dictionary<String,Int>()

→ String, Int 타입으로 구성된 딕셔너리를 비어있게 생성

 

□ 빈 딕셔너리를 생성하지 않고 선언과 동시에 데이터 값 저장

var dic1: [String: Int] = ["height": 160 , "age": 20]

→ String, Int 타입으로 선언과 동시에 생성이 가능하다.

 

□ 딕셔너리 한개에 여러 타입을 선언하는 경우

var dic4: [String: Any] = ["name": "A","age" : 10]
var dic5: NSDictionary = ["name": "A","age" : 10]

→ 다음과 같이 Any로 설정하면 된다.

→ NSDictionary로 설정할 수 있다.

 

□ Key값에 Any를 사용하는 경우

var dic6: [Any:Any] = ["name": "A","age" : 10]

→ Any를 Key값에 사용하는 경우 다음과 같은 오류가 발생한다.

 

Dictionary 유용한 함수

 

□ 개수 파악 및 비어있는지 확인

let count = dic1.count	//2
let count1 = dic2.count	//0
let isEmpty1: Bool = dic1.isEmpty	//false
let isEmpty2:Bool = dic2.isEmpty	//true

→ 알아 두면 쓸모 있는 지식

 

Dictionary 접근

let height = dic1["height"]	//160
let weight = dic1["weight"]	//nil

→ Dictionary에 Key가 존재하는 경우 Key에 맞는 Value를 반환하지만 Key가 없는 경우 nil을 반환한다.

따라서 nil값을 방지하기 위해 default값을 지정한다.

let weight = dic1["weight",default: 40] //40

 

Dictionary 추가

 

□ Subscript로 추가

dic1["weight"] = 20
dic1["height"] = 120

→ key값이 있는 경우 update 실행, 없는 경우 추가

 

□ updateValue를 사용하여 추가

dic1.updateValue(130, forKey: "height")
dic1.updateValue(30, forKey: "weight")

→ key값이 있는 경우 update 실행, 없는 경우 추가하고 nil 반환

 

Dictionary 삭제

 

□ Subscript로 추가

dic1["height"] = nil
dic1["weight"] = nil

 

□ updateValue를 사용하여 추가

dic1.removeValue(forKey: "height")
dic1.removeValue(forKey: "weight")

→ Key가 없는 경우 nil 반환, Key값 존재하는 경우 삭제된 Value 반환

 

Dictionary Key, Value 나열

dic4.keys
dic4.values

→ key, value를 사용하면 나열 가능하다.

 

Dictionary 비교

비교 연산자를 사용하여 비교할 수 있지만 Key, Valuerk 정확하게 일치 해야 한다.

대소문자도 비교함

 

Dictionary 요소 검색

Dictionary를 검색할 때 클로저를 이용하여 검색하는데 클로저의 매개변수 타입은 내가 지정한 Dictionary 타입과 같아야한고 반환타입은 Bool 타입이어야 한다.

 

□ 클로저를 활용하여 딕셔너리 요소 찾기

let condiction: ((String,Any)) -> Bool = {
    $0.0.contains("age")
}

dic4.contains(where: condiction)
dic4.first(where: condiction)
dic4.filter(condiction)

→ contains는 위에 예시들과 같이 요소를 포함하면 true, 아니면 false 반환

→ first는 클로저를 만족하는 첫 번째 요소를 튜플로 리턴( 딕셔너리는 순서가 없기 때문에 호출때 마다 달라질 수 있음)

→ filter 해당 클로저를 만족하는 요소들만 모아서 새로운 딕셔너리로 리턴

 

 

# 참고한 사이트

  1. https://babbab2.tistory.com/113