gpt4 book ai didi

swift - Swift 中 X 的通用集合?

转载 作者:可可西里 更新时间:2023-11-01 00:21:22 25 4
gpt4 key购买 nike

我正在尝试制定一个委托(delegate)协议(protocol),该协议(protocol)可以接受 X 类型对象的集合。该协议(protocol)的相同方法应该能够接受以下实例:

  • Set<X>
  • Array<X>
  • LazyMapCollection<Dictionary<_, X>, X> (最后一个来自Dictionary.values)

问题来了,如何声明协议(protocol)方法?

以下是一些不太正确的候选方法声明:

public protocol BlahDelegate : NSObjectProtocol {
// won't compile; 'cannot specialize generic type "Sequence"'
func blah(_ sender: Blah,foundStuff stuff: Sequence<Stuff>)

// won't compile; 'cannot specialize generic type "Collection"'
func blah(_ sender: Blah,foundStuff stuff: Collection<Stuff>)

// this can't take in Set<Stuff> nor LazyMapCollection<Dictionary<_, Stuff>, Stuff>
func blah(_ sender: Blah,foundStuff stuff: Array<Stuff>)

// this can't take in Array<Stuff> nor LazyMapCollection<Dictionary<_, Stuff>, Stuff>
func blah(_ sender: Blah,foundStuff stuff: Set<Stuff>)
}

PS:这是针对 Swift 3 的。

最佳答案

您需要使方法本身成为通用的,并将类型参数用作“普通”参数的类型。然后,您还可以限制第一种类型的关联类型。例如:

func blah<T>(stuff: T) where T : Sequence, T.Iterator.Element : Stuff

意味着 stuff 必须是一个 Sequence,其元素类型符合或继承自 Stuff

关于swift - Swift 中 X 的通用集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42171554/

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