- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试扩展 Array<MutatingCollection>
所以我可以镜像数组数组的内容,但编译器说我不能调用 reverse()
在数组中的元素上,尽管 reverse()
在 MutatingCollection
中定义协议(protocol)。
我想做这样的事情:
var table = [[0,1,2],
[3,4,5],
[6,7,8]]
table.mirror()
//table now [[2,1,0],
// [5,4,3],
// [8,7,6]]
这是我的(不工作的)代码:
extension Array where Element == MutableCollection {
mutating func mirror() {
for index in self.indices {
self[index].reverse()
}
}
}
我已经尝试过 self.map {array in array.reverse()}
以及(我认为做同样的事情,但我没有完全理解 map()
)这两种方式都会导致相同的错误消息:
Member 'reverse' cannot be used on value of type 'MutableCollection'
编辑:我可以直接调用相同的代码,它按预期工作。
也许我正在使用 extension
不正确,或者 Swift Playgrounds 以某种方式阻止了我的访问。
最佳答案
首先,扩展应该这样声明:
extension Array where Element : MutableCollection {
您想检查 Element
遵守协议(protocol) MutableCollection
, 并不是说它是 MutableCollection
但是,我无法调用 reverse
subscript
上的方法因为某些原因。我能做的最好的事情是:
extension Array where Element : MutableCollection {
mutating func mirror() {
for index in self.indices {
self[index] = self[index].reversed() as! Element
}
}
}
虽然强制转换非常丑陋,但我不喜欢这样做,但它会在您需要它工作时起作用。我想我应该测试 Actor 阵容以确定但我看不到任何调用 reversed()
的情况将导致无法转换回 Element
的集合.
编辑:
我想通了这个问题。 reverse()
方法仅在 MutableCollection
上有效当它也是 BidirectionalCollection
时.此代码现在可以正常工作:
extension MutableCollection where
Iterator.Element : MutableCollection &
BidirectionalCollection,
Indices.Iterator.Element == Index {
mutating func mirror() {
for index in self.indices {
self[index].reverse()
}
}
}
现在代码应该适用于所有 MutableCollection
其元素都是 MutableCollection
和 BidirectionalCollection
- 例如 [Array<Int>]
甚至 [ArraySlice<Int>]
您可以查看 reverse()
的完整代码在 Swift 3.1 中:
extension MutableCollection where Self : BidirectionalCollection
关于arrays - Array<MutableCollection> 的 Swift 扩展不允许 reverse(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769532/
我找不到有关如何符合 MutableCollection 的文档. Google 在该主题上完全空白。 示例,我想为 GMSPath 添加一致性/GMSMutablePath : import Cor
来自 Apple's MutableCollection API reference : The MutableCollection protocol allows changing the valu
我正在尝试为 MutableCollection 写一个扩展需要利用 sort(by:)排序方法,但它似乎不适用于 MutableCollection扩展,尽管此方法是为 MutableCollect
我正在尝试扩展 Array所以我可以镜像数组数组的内容,但编译器说我不能调用 reverse()在数组中的元素上,尽管 reverse()在 MutatingCollection 中定义协议(prot
我有一个文件,其中有 2 个不同的扩展名: extension MutableCollection where Indices.Iterator.Element == Index { } extens
我正在尝试使用 kotlin 创建一个 MutableList,但我收到一条错误消息: 类型推断失败。预期类型不匹配:推断类型为 MutableList 但预期为 MutableCollection
我是一名优秀的程序员,十分优秀!