gpt4 book ai didi

swift - 扩展 CollectionType 时计算元素类型

转载 作者:搜寻专家 更新时间:2023-11-01 06:39:57 28 4
gpt4 key购买 nike

我正在尝试实现一个符合/扩展 CollectionType 的协议(protocol),但是它不采用显然是元素类型的单一泛型类型,所以我想能够计算/强制 Generator.Element 的类型。

我将以 map 协议(protocol)为例:

protocol Map : CollectionType {
typealias Key
typealias Value

subscript(key:Key) -> Value? { get }
}

有没有一种方法可以指定 Self.Generator.Element 必须是 (Key, Value),而不是类型作者的文档?

最佳答案

您想定义一个 CollectionType 的子协议(protocol),对 CollectionType.Generator.Element 嵌套类型附加约束。这个嵌套类型属于CollectionType.Generator嵌套类型,被约束为GeneratorType,所以首先我们需要引入一个GeneratorType的子协议(protocol)> 有额外的约束:

protocol KeyValueGeneratorType: GeneratorType {

associatedtype Key
associatedtype Value

mutating func next() -> (Key, Value)?

}

然后我们可以引入一个带有附加约束的CollectionType子协议(protocol):

protocol KeyValueCollectionType: CollectionType {

associatedtype Generator: KeyValueGeneratorType

}

Dictionary 类型实际上符合我们的协议(protocol),所以我们只需要一个简短的声明来表明这一点:

extension DictionaryGenerator: KeyValueGeneratorType {}
extension Dictionary: KeyValueCollectionType {}

关于swift - 扩展 CollectionType 时计算元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36776222/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com