Насколько допустима установка «nil» в качестве значения словаря [String: String]?

Мне любопытно, почему этот фрагмент корректно работает в Playground:

var dict = [String: String]()
dict["key"] = nil
let value = dict["key"]

мы видим, что я объявил Dictionary с необязательными значениями, после проверки его на Playground он работает аналогично словарю, объявленному как [String: String?]

У меня вопрос: в чем разница в настройке значения nil между словарем, объявленным как [String: String], и [String: String?]?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
120
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

dict["key"] = nil - это сокращение для удаления ключа из словаря (то же самое, что и при использовании dict.removeValue(forKey: "key")). Если под ключом "key" было значение, после этой строки запись весь удаляется из словаря (как ключ, так и значение).

Прочтите индексы документы, чтобы узнать больше:

If you assign nil as the value for the given key, the dictionary removes that key and its associated value.

In the following example, the key-value pair for the key "Aquamarine" is removed from the dictionary by assigning nil to the key-based subscript.

hues["Aquamarine"] = nil
print(hues)
// Prints "["Coral": 18, "Heliotrope": 296, "Cerise": 330]"

let value = dict["key"] получает значение для ключа и по определению возвращает nil, если для данного ключа нет записи (что в вашем случае).

Согласно документы, нижний индекс возвращает либо значение, либо ноль, если ключа нет в словаре:

The value associated with key if key is in the dictionary; otherwise, nil.

dict["key"] = nil означает, что вы удаляете элемент из словаря. Тип возврата dict[someKey] - Необязательный, так как ключа там может не быть.

Вы можете рассмотреть возможность реализации:

dict["key"] = nil

аналогично вызову removeValue(forKey:):

dict.removeValue(forKey: "key")

По умолчанию получение значения из словаря возвращает значение по желанию:

var dict = [String: String]()
dict["key"] = "Hello"

let value = dict["key"] // Optional("Hello")

Обратите внимание, что тип value - это необязательная строка (String?).

@dwonvoter неуместно голосовать против, не упоминая, в чем причина этого :)

Ahmad F 12.04.2018 15:17

Другие вопросы по теме