Dictionary에서 키-값 쌍을 제거하는 방법으로 해당 항목에 nil 값을 할당하는 것을 배웠다
var capital: [String:String] = ["KR":"Seoul", "EN":"London", "FR":"Paris"]
print(capital) //["EN": "London", "KR": "Seoul", "FR": "Paris"]
capital["EN"] = nil
print(capital) //["KR": "Seoul", "FR": "Paris"]
그런데 분명 Optional에 대해서 배울 때 nil은 Optional Type에만 넣을 수 있다고 했다
var cat: String = "chap"
print(cat)
cat = nil
print(cat)
//error: 'nil' cannot be assigned to type 'String'
위처럼 Optional이 아닌 일반 Data type에 nil을 할당하면 'nil'을 'String' 유형에 할당할 수 없다고 한다. 그런데 어떻게 optional로 선언하지도 않은 dictionary에 nil을 넣을 수 있는지??
공식문서를 찾아보니 subscript로 요소에 접근하면 반환값이 Optional Type이다
key가 dictionary에 있으면 value를 반환하고, key가 없으면 nil을 반환한다
dictionary에 없는 key 값이 입력될 때를 대비하기 위해서 무조건 optional을 씌우는 것이다!
print(capital["KR"]) //Optional("Seoul")
print(capital["JP"]) //nil
그럼 value 값에 nil을 넣고 싶은 경우는?!!
var capital: [String:String?] = ["KR": "Seoul", "EN": nil]
capital["KR"] = nil as String? //기존 key
capital["FR"] = nil as String? //새로운 key
print(capital) //["EN": nil, "KR": nil, "FR": nil]
var capital: [String:String?] = ["KR": "Seoul", "EN": nil]
let dictNil: String? = nil
capital["KR"] = dictNil
print(capital) //["EN": nil, "KR": nil]
var capital: [String:String?] = ["KR": "Seoul", "EN": nil]
capital.updateValue(nil, forKey: "KR")
print(capital) //["EN": nil, "KR": nil]
참고 > 공식문서 Dictionary/subscript(_:), Dictionary/updateValue(_:forKey:), stackoverflow
헉 swift의 dictionary를 subscript로 접근하면, 그니까 key 값으로 접근하면 반환값 자체가 옵셔널 타입이어서 dictionary의 아이템 삭제에 nil을 넣어도 되는군요! 놀라운 사실🫶입니다