public extension Dictionary { var prettifiedDescription: String { return "[ " + map { key, value in let keyDescription = String(describing: key) let valueDescription = String(describing: value) let maxLength = 20 let truncatedValueDescription = valueDescription.count > maxLength ? valueDescription.prefix(maxLength) + "..." : valueDescription return keyDescription + " : " + truncatedValueDescription }.joined(separator: ", ") + " ]" } } // MARK: - Functional Convenience public extension Dictionary { func setting(_ key: Key, _ value: Value?) -> [Key: Value] { var updatedDictionary: [Key: Value] = self updatedDictionary[key] = value return updatedDictionary } func updated(with other: [Key: Value]) -> [Key: Value] { var updatedDictionary: [Key: Value] = self other.forEach { key, value in updatedDictionary[key] = value } return updatedDictionary } func removingValue(forKey key: Key) -> [Key: Value] { var updatedDictionary: [Key: Value] = self updatedDictionary.removeValue(forKey: key) return updatedDictionary } }