6

随着 beta 5 的更改,我在下面的扩展中遇到了与 KeyType 和 ValueType 相关的错误。

extension Dictionary {

    func filter(predicate: (key: KeyType, value: ValueType) -> Bool) -> Dictionary {
        var filteredDictionary = Dictionary()

        for (key, value) in self {
            if predicate(key: key, value: value) {
                filteredDictionary.updateValue(value, forKey: key)
            }
        }

        return filteredDictionary
    }
}

我可能遗漏了一些东西,但我似乎在发行说明中找不到任何相关的更改,而且我知道这在 beta 3 中有效。

4

1 回答 1

7

Dictionary声明已更改为仅使用andKey用于Value其关联类型,而不是KeyTypeand ValueType

// Swift beta 3:
struct Dictionary<KeyType : Hashable, ValueType> : Collection, DictionaryLiteralConvertible { ... }

// Swift beta 5:
struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible { ... }

所以你的扩展只需要:

extension Dictionary {

    func filter(predicate: (key: Key, value: Value) -> Bool) -> Dictionary {
        var filteredDictionary = Dictionary()

        for (key, value) in self {
            if predicate(key: key, value: value) {
                filteredDictionary.updateValue(value, forKey: key)
            }
        }

        return filteredDictionary
    }
}
于 2014-08-06T03:58:05.893 回答