Notice
Recent Posts
Recent Comments
Link
Tags
- 스위프트
- DiffableDataSource
- LanguageGuide
- Keychain
- github
- 애플사이다
- iPad
- WWDC
- 앱개발
- Swift
- Human Interface Guidelines
- 야곰아카데미
- lineBreakMode
- CollectionView
- Split View
- 전달인자 레이블
- 애플
- UIKit
- Accessibility
- IOS
- GOF
- 디자인패턴
- TOSS
- lineBreakStrategy
- orthogonalScrollingBehavior
- Apple
- UILabel
- HIG
- Combine+UIKit
- iTerm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Today
- Total
애플사이다의 iOS 개발 일지
[Dictionary] value에 nil을 저장하려면? - nil의 타입을 명시 본문
Dictionary의 value 타입을 옵셔널로 지정하고, value에 nil을 할당하려면 어떻게 해야 할까?
궁금해서 구글링 해봤는데, StackOverFlow에서 간단히 답을 찾을 수 있었다.
- 검색 키워드 : how to save nil at dictionary value in swift
- Reference : How to add nil value to Swift Dictionary?
Dictionary 기본 문법
일반적으로 Dictionary는 이렇게 다룬다.
// Dictionary 생성
var juices: [String: String] = ["Apple": "Applecider", "Lemon": "Lemonade"]
// ✅ key/value pair 삭제
juices["Lemon"] = nil
// ✅ key/value pair 추가
juices["Grape"] = "Grape Juice"
print(juices) // ["Apple": "Applecider", "Grape": "Grape Juice"] 출력
- 삭제 : Dictionary의 value에 nil을 할당하면, key "Lemon"과 value "Lomonade"가 삭제된다.
주의 - key "Lemon"의 value로 nil을 저장하는 것이 아니다. - 추가 : 새로운 key "Grape"와 value "Grape Juice"를 Dictionary에 추가한다.
위와 같이 Dictionary의 value에 nil을 할당하면, 해당 key/value pair가 삭제된다.
그런데 value에 nil을 저장하려면 어떻게 해야 할까?
Dictionary의 value 타입을 옵셔널로 지정하고, 다시 nil을 할당해보자.
var juices: [String: String?] = ["Apple": "Applecider", "Starfruit": nil]
juices["Apple"] = nil // 기존 key - key/value pair 삭제됨
juices["Plum"] = nil // 새로운 key - key/value pair 추가 안됨
print(juices) // ["Starfruit": nil] 출력
- 맨 위부터 한 줄씩 살펴보자.
- Starfruit : Dictionary를 생성할 때, value에 nil을 할당하면 정상적으로 저장된다.
- Apple : 기존에 있던 key인 "Apple"에 nil을 할당하면, key/value pair가 삭제된다. (value로 nil이 저장되지 않음)
- Plum : 기존에 없던 새로운 key인 "Plum"에 nil을 할당하면, key/value pair가 추가되지 않는다. (value로 nil이 저장되지 않음)
nil이 저장되지 않고, 여전히 key/value pair가 삭제된다.
따라서 아래 세 가지 방법을 활용해야 한다.
방법-1. nil을 할당할 때 String? 타입임을 명시한다.
var juices: [String: String?] = ["Apple": "Applecider", "Starfruit": nil]
// 🍎 String? 타입의 nil을 할당
juices["Apple"] = nil as String? // 기존 key - nil이 저장됨
juices["Plum"] = nil as String? // 새로운 key - nil이 저장됨
print(juices) // ["Starfruit": nil, "Apple": nil, "Plum": nil] 출력
- Dictionary의 value로 nil as String? 을 할당한다는 것은 nil이 String? 타입임을 명시한다는 뜻이다.
- Apple : 기존에 있던 key인 "Apple"에 상수 nilAsValue를 할당하면, value로 nil이 저장된다!
- Plum : 기존에 없던 새로운 key인 "Plum"에 nil을 할당하면, key/value pair가 추가되고 value로 nil이 저장된다!
방법-2. updateValue 메서드를 사용한다.
var juices: [String: String?] = ["Apple": "Applecider", "Starfruit": nil]
// 🍎 updateValue 메서드를 호출
juices.updateValue(nil, forKey: "Apple") // 기존 key - nil이 저장됨
juices.updateValue(nil, forKey: "Plum") // 새로운 key - nil이 저장됨
print(juices) // ["Starfruit": nil, "Apple": nil, "Plum": nil] 출력
- Dictionary의 updateValue 메서드를 호출한다.
- updateValue를 자동 완성했을 때 컴파일러가 타입 유추를 통해 value가 String? 타입임을 예상하기 때문에 nil 할당이 가능하다.
따라서 value에 nil이 저장된다.
방법-3. nil을 상수/변수에 할당하고, 해당 상수/변수를 value에 할당한다.
var juices: [String: String?] = ["Apple": "Applecider", "Starfruit": nil]
// 🍎 nil을 상수에 할당하고, 해당 상수를 value로 할당
let nilAsValue: String? = nil
juices["Apple"] = nilAsValue // 기존 key - nil이 저장됨
juices["Plum"] = nilAsValue // 새로운 key - nil이 저장됨
print(juices) // ["Starfruit": nil, "Apple": nil, "Plum": nil] 출력
- Dictionary의 value로 nil 자체를 바로 할당하지 않는다.
nil을 별도의 상수 nilAsValue에 할당하고, 해당 상수를 Dictionary의 value에 할당한다. - 이를 통해 컴파일러는 value가 String? 타입임을 알 수 있게 된다. 따라서 value에 nil이 저장된다.
- Reference
- Swift Language Guide > Collection Types
- StackOverFlow > How to add nil value to Swift Dictionary?
🍎 포스트가 도움이 되었다면, 공감🤍 / 구독🍹 / 공유🔗 / 댓글✏️ 로 응원해주세요. 감사합니다.
'Swift > Swift 문법' 카테고리의 다른 글
[Swift] OOP에서 인스턴스란? 타입과 인스턴스, 객체와 인스턴스 (0) | 2021.10.24 |
---|---|
[Swift] 이니셜라이저의 종류 (간단 요약) (0) | 2021.09.30 |
[Swift] Hashable 해야 한다? 해쉬값이란? (간단 요약) (0) | 2021.09.25 |
[Swift] print 함수로 줄바꿈 없이 출력, 문자열 사이 구분하기 - 콘솔 로그 및 print 함수 (1) | 2021.09.15 |
Comments