swift - 字典不符合 ExtensibleCollectionType

标签 swift dictionary standard-library swift2 swift-protocols

Swift 中的字典不符合 ExtensibleCollectionType。因为扩展它很容易(它在某种程度上不适用于 Swift 1.2;使用 Swift 2):

extension Dictionary: ExtensibleCollectionType {

    // ignoring this function
    mutating public func reserveCapacity(n: Int) {}

    mutating public func append(x: Dictionary.Generator.Element) {
        self[x.0] = x.1
    }

    mutating public func extend<S : SequenceType where S.Generator.Element == Dictionary.Generator.Element>(newElements: S) {
        for x in newElements {
            self.append(x)
        }
    }
}

如果这样做,还可以添加词典(另请参阅:Adding SequenceTypes)

不在标准库中实现它有什么好处吗?

最佳答案

从 Xcode 7 beta 5 开始,ExtensibleCollectionType 已重命名(并重组)为 RangeReplaceableCollectionType。所以符合这个协议(protocol)的意图更加明确:

新协议(protocol)只要求这个方法完全符合它:

mutating func replaceRange<C : CollectionType where C.Generator.Element == Generator.Element>(subRange: Range<Self.Index>, with newElements: C)

这对于任何无序集合都没有多大意义,因为此操作不可预测(某些情况下元素计数除外)。此外,高度依赖索引的默认实现和其他要求对此类集合没有多大用处。

总而言之,范围的插入和替换应该是可预测的,并保持其他元素的结构/顺序。因此 Dictionaries 和任何其他无序集合不应符合此特定协议(protocol)。

关于swift - 字典不符合 ExtensibleCollectionType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31141012/

相关文章:

ios - 来自 UICollectionView 的 didSelectItemAt 和 didDeSelectItemAt

c++ - C++中如何从map的迭代器中调用类成员函数?

python - 如何在 python 3.6 中创建带有值列表的频率字典

python - python 将具有相同键值对的多个字典合并为一个字典

python - Decimal 类如何不可变?

c++ - 如何将 std::vector 的某些元素移动到 vector 中的新索引?

ios - 多次调用tableView.reloadData会不会导致性能问题?

SwiftUI 绑定(bind) bool 外部 View - 'Accessing State' s 值不在 View 上安装'

ios - Facebook Graph 请求无法在 iOS 9.2 中检索电子邮件 - xCode 7

c++ - C 或 C++ 是否有标准的正则表达式库?