创建一个Swift Dictionary子类?

Hea*_*ers 9 collections swift

Swift Dictionary我可以将a子类化,以便将自定义传递Dictionary给期望普通的方法Dictionary吗?

编辑

在我的情况下,我希望我的自定义Dictionary在插入顺序中迭代其键.

Cat*_*Man 7

Swift词典是结构,而不是类,因此它们不能被子类化.理想情况下,您正在使用的方法将被声明为采用适当约束的通用CollectionType(或ExtensibleCollectionType,或SequenceType,具体取决于具体情况),而不是具体的Dictionary.

如果由于某种原因这对你不起作用,你可以改为继承NSDictionary.

(编辑)正如Antonio指出的那样,你可以做扩展词典{...}来向Dictionary结构添加东西,在某些情况下可以替换子类.


use*_*801 6

以下是一个符合 Collection 的结构,它委托给字典。可以很容易地根据任何需要进行修改。

public struct MyDictionary<Key: Hashable, Value: MyKindOfValue>: Collection {
    public typealias DictionaryType = Dictionary<Key, Value>
    private var dictionary: DictionaryType

    //Collection: these are the access methods
    public typealias IndexDistance = DictionaryType.IndexDistance
    public typealias Indices = DictionaryType.Indices
    public typealias Iterator = DictionaryType.Iterator
    public typealias SubSequence = DictionaryType.SubSequence

    public var startIndex: Index { return dictionary.startIndex }
    public var endIndex: DictionaryType.Index { return dictionary.endIndex }
    public subscript(position: Index) -> Iterator.Element { return dictionary[position] }
    public subscript(bounds: Range<Index>) -> SubSequence { return dictionary[bounds] }
    public var indices: Indices { return dictionary.indices }
    public subscript(key: Key)->Value? {
        get { return dictionary[key] }
        set { dictionary[key] = newValue }
    }
    public func index(after i: Index) -> Index {
        return dictionary.index(after: i)
    }

    //Sequence: iteration is implemented here
    public func makeIterator() -> DictionaryIterator<Key, Value> {
        return dictionary.makeIterator()
    }

    //IndexableBase
    public typealias Index = DictionaryType.Index
}
Run Code Online (Sandbox Code Playgroud)