- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个协议(protocol),我想表达一个函数/变量可以返回一个特定类型的 RandomAccessCollection
- 不一定是一个 Array
因为对于一个实现它使用访问数据的库。将库调用包装在符合 RandomAccessCollection
的类中很容易,因此我宁愿不必构造一个 Array
,因为它会涉及大量额外的复制。
我正在尝试这样的事情:
protocol MyThing
{
var entries: RandomAccessCollection where Element: MyEntry { get }
}
..但是编译器不喜欢那样;它似乎不喜欢那里有一个 where
子句。
有没有办法做到这一点,这样我的协议(protocol)的一个实现可以返回一个自定义的 RandomAccessCollection
-conforming 类,而另一个(比如,用于测试的模拟版本)可以返回一个 数组
?还是我需要为所有情况定义一个 RandomAccessCollection
?
最佳答案
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/
我通常实现行为类似于数组的类型,例如: struct Dataset: RandomAccessCollection { let ids: [Int] // Other propert
我有一个协议(protocol),我想表达一个函数/变量可以返回一个特定类型的 RandomAccessCollection - 不一定是一个 Array 因为对于一个实现它使用访问数据的库。将库调用
根据 Swift 5 文档,String 的方法 randomElement() 复杂度为 O(1) 或 O(*n*) 取决于符合 RandomAccessCollection 协议(protocol
当我们尝试从 Array 中检索一系列元素时,我们会返回一个 ArraySlice: let array = [1, 3, 5, 2] let arraySlice = array[..(_ c: T
使用 _base 属性访问 ReverseRandomAccessCollection 的元素是一种好习惯吗? let myArray = [1, 2, 3] print(myArray.first)
我是一名优秀的程序员,十分优秀!