gpt4 book ai didi

swift - 返回特定类型的 RandomAccessCollection

转载 作者:行者123 更新时间:2023-11-28 15:26:34 25 4
gpt4 key购买 nike

我有一个协议(protocol),我想表达一个函数/变量可以返回一个特定类型的 RandomAccessCollection - 不一定是一个 Array 因为对于一个实现它使用访问数据的库。将库调用包装在符合 RandomAccessCollection 的类中很容易,因此我宁愿不必构造一个 Array,因为它会涉及大量额外的复制。

我正在尝试这样的事情:

protocol MyThing
{
var entries: RandomAccessCollection where Element: MyEntry { get }
}

..但是编译器不喜欢那样;它似乎不喜欢那里有一个 where 子句。

有没有办法做到这一点,这样我的协议(protocol)的一个实现可以返回一个自定义的 RandomAccessCollection-conforming 类,而另一个(比如,用于测试的模拟版本)可以返回一个 数组?还是我需要为所有情况定义一个 RandomAccessCollection

最佳答案

swift 4

Swift 4 实现了以下演进建议:

这将允许您将 associatedtype 添加到您的协议(protocol)中,该协议(protocol)可以通过 where 子句使用更复杂的类型约束;不仅向 associatedtype 类型本身添加约束。例如,应用于您的示例:

// Swift 4 and beyond
protocol MyEntry { /* ... */ }

protocol MyThing {
associatedtype MyCollectionType: RandomAccessCollection
where MyCollectionType.Iterator.Element: MyEntry
var entries: MyCollectionType { get }
}

extension Int : MyEntry { /* ... */ }

// OK, Int conforms to MyEntry
struct Foo: MyThing {
internal var entries: [Int]
}

// Compile time error: Double doesn't conform to MyEntry
struct Bar: MyThing {
internal var entries: [Double]
}

// OK given that MyCustomRandomAccessCollection conforms
// to RandomAccessCollection
struct Baz: MyThing {
internal var entries: MyCustomRandomAccessCollection<Int>
}

关于swift - 返回特定类型的 RandomAccessCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45150983/

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