Извлечение строки из [String: Any?] по ключу

var annoying: [String: Any?]

Чтобы получить значение высоты, лучшее, что я мог придумать, это следующее:

let found: String = (annoying["height"] as? String? ?? "?") ?? "?"
  1. Это кажется очень плохим, есть ли лучший способ?

  2. Действительно, в идеале мне бы хотелось

    пусть найдено: Строка? = :О

Таким образом, это ноль, если ключ не существует - или - значение равно нулю - или - значение не является строкой - но я буквально не знаю, как это сделать, и каждая попытка терпела неудачу:/

(Я просто использую маркер «?» в первом решении.)

Что-то вроде let found: String? = annoying["height", default: ""] as? String?

Schottky 04.07.2024 20:00
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете просто сделать

let found = annoying["height"] as? String

Требования

ноль, если ключ не существует

let annoying: [String: Any?] = [:]
let found = annoying["height"] as? String
// nil

-или- значение равно нулю

let annoying: [String: Any?] = ["height":nil]
let found = annoying["height"] as? String
// nil

-или- значение не является строкой

let annoying: [String: Any?] = ["height":42]
let found = annoying["height"] as? String
// nil

И это работает для строковых ключей:

let annoying: [String: Any?] = ["height":"10m"]
let found = annoying["height"] as? String
// "10m"

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

Как вы можете или можете создать и/или «настроить» свойство NSLayoutAnchor?
Запустите цикл внутри вложенного массива в Swift
Есть ли какой-либо встроенный способ получить мантиссу и показатель степени (значения «научной нотации» или «электронной нотации») CGFloat в Swift?
Сохраните ссылку на TaskGroup или добавьте ее за пределы области действия
Будет ли в Swift способ, похожий на синтаксический сахар, сделать «член по умолчанию» структуры (как если бы к типу были добавлены «скрытые поля»)?
Как сделать расширение Tuple в текущем Swift? Кажется, это доступно экспериментально
Нет такого модуля SwiftData
Совершенно ли правильно, что это вычисляемое свойство будет работать как «указатель» в текущем Swift?
Проверьте, находится ли дата на расстоянии 1 секунды от новой даты
Запрос доступа с помощью AVCaptureDevice вызывает переключение на выбранной вкладке в представлении вкладок