Ich versuche, Array<MutatingCollection>
zu erweitern, damit ich den Inhalt eines Arrays von Arrays spiegeln kann, aber der Compiler sagt, ich kann reverse()
nicht auf den Elementen in aufrufen Array, obwohl reverse()
in MutatingCollection
Protokoll definiert ist.Schnelle Erweiterung von Array <MutableCollection> erlaubt keine Umkehrung()
möchte ich so etwas wie dies zu tun:
var table = [[0,1,2],
[3,4,5],
[6,7,8]]
table.mirror()
//table now [[2,1,0],
// [5,4,3],
// [8,7,6]]
Hier ist meine (nicht funktioniert) Code:
extension Array where Element == MutableCollection {
mutating func mirror() {
for index in self.indices {
self[index].reverse()
}
}
}
ich es als self.map {array in array.reverse()}
auch versucht haben (was ich denken tut das gleiche, aber ich bin nicht völlig grok map()
) Beide Möglichkeiten führen zu der gleichen Fehlermeldung:
Member 'reverse' cannot be used on value of type 'MutableCollection'
Edit: Ich kann den gleichen Code direkt aufrufen und es funktioniert, wie ich es vorhatte.
Vielleicht verwende ich extension
unsachgemäß oder Swift Spielplätze meinen Zugang irgendwie blockiert.
Dieser stürzt ab, wenn 'Element' ein veränderliches Sammlung ist aber kein Array, z.B. für 'var table = [[0,1,2] .dropFirst(), [3,4,5], [6,7,8]]', wobei 'Element'' ArraySlice 'ist. –
@MartinR Ich glaube, ich habe die Ursache für das Problem in dieser Frage genagelt, sowie Korrektur für das Problem, das Sie erwähnt haben. Bitte zögern Sie nicht, ihre Richtigkeit für mich zu überprüfen. – ColGraff
Mit einer zusätzlichen Einschränkung 'Indices.Iterator.Element == Index' können Sie den künstlichen 'guard let index = index ...' loswerden, vergleichen https://stackoverflow.com/a/44457590/1187415 oder https: //stackoverflow.com/a/40331858/1187415. Es sollte nicht in Swift 4 notwendig sein. –