public extension Bus { /// Пропускаем далее предоставленный ключ. static func convertKeyValue( _ key: String, _ v: (key: String, value: Any) ) -> (String, T)? { guard key == v.key, let value = v.value as? T else { return nil } return (key, value) } /// Пропускаем далее предоставленные ключи. static func convertKeyValue( _ keys: Set, _ v: (key: String, value: Any) ) -> (String, T)? { guard keys.contains(v.key), let value = v.value as? T else { return nil } return (v.key, value) } /// Обрабатываем. static func processKeysValue( _ v: (key: String, value: Any), _ keysIn: Set, _ handler: @escaping ((Src) -> Dst?) ) -> Dst? { guard keysIn.contains(v.key), let vIn = v.value as? Src else { return nil } return handler(vIn) } }