Как использовать необязательный ключ для доступа к значению словаря?

У меня есть необязательное значение, которое я хотел бы использовать для индексирования словаря.

Как я могу сделать это без необходимости "пачкать" мой код if let/else?

например

if
    let key = type(of: self).notificationValueKeys[notification.name],
    let value = notification.userInfo?[key] {

    self.value = value

} else {

   self.value = nil
}

1 ответ

Один из элегантных способов сделать это с расширением Dictionary разрешить индекс ([]) оператор на Dictionary работать с дополнительными ключами:

/**
 convenience subscript operator for optional keys

 - parameter key
 - returns: value or nil
 */
subscript(key: Key?) -> Value? {

    guard let key = key else { return nil }
    return self[key]
}

Это позволяет приведенному выше коду стать:

let key = type(of: self).notificationValueKeys[notification.name]
let value = notification.userInfo?[key]

self.value = value

куда let value теперь необязательно.

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