Вы добавили isSubDictionary
в качестве расширения словаря, поэтому тип self
- Dictionary<Key, Value>
, а не Dictionary<AnyHashable, Any>
. Это означает, что ключи self
и dictionary
не совпадают.
Значение типа AnyHashable
скрывает, но все еще знает, тип это перенос. Когда вы пишете:
dictionary[key]
key
обернут в AnyHashable
, но тип оборачивается Key
. Поэтому, когда он используется в качестве ключа для dictionary
, обернутый тип Key
не соответствует обернутым типам в ключах этого второго словаря. Вы можете увидеть это с помощью:
print("\(dictionary.keys.contains(self.keys.first!))") // prints false
Если вы хотите, чтобы два словаря были одного типа, сделайте функцию:
func isSubDictionary(of dictionary: [Key: Any]) -> Bool