Wie kann ich so etwas machen? Nehmen Sie die ersten n Elemente aus einem Array:
newNumbers = numbers[0..n]
Derzeit wird der folgende Fehler angezeigt:
error: could not find an overload for 'subscript' that accepts the supplied arguments
BEARBEITEN:
Hier ist die Funktion, in der ich arbeite.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}
Slice
auf einArray
, sondern ein neues Array von einer Scheibe zu schaffen. Eine Besetzung würde denas
Operator verwenden,numbers as Array
was zu einem Fehler führen würde...
änderten sich zu..<
; Die drei Punkte (eine Ellipse) sind gleich geblieben. Vielen Dank für die Erinnerung; Ich habe die Antwort aktualisiert.# 1. Mit
Array
Index mit BereichMit Swift 5, wenn Sie schreiben ...
…
newNumbers
Ist nicht vom Typ,Array<Int>
sondern vom TypArraySlice<Int>
. Das liegt daranArray
, dass essubscript(_:)
eine Rückgabe gibtArraySlice<Element>
, die laut Apple einen Blick auf den Speicher eines größeren Arrays bietet.Außerdem bietet Swift auch
Array
einen Initialisierer namensinit(_:)
, der es uns ermöglicht, ein neues Array aus einemsequence
(einschließlichArraySlice
) zu erstellen .Daher können Sie
subscript(_:)
mitinit(_:)
verwenden, um ein neues Array aus den ersten n Elementen eines Arrays zu erhalten:# 2. Mit
Array
derprefix(_:)
Methode vonSwift bietet eine
prefix(_:)
Methode für Typen, die demCollection
Protokoll entsprechen (einschließlichArray
).prefix(_:)
hat die folgende Erklärung:Apple sagt auch:
Daher können Sie alternativ zum vorherigen Beispiel den folgenden Code verwenden, um aus den ersten Elementen eines anderen Arrays ein neues Array zu erstellen:
quelle
quelle
Eine weitere Variante mit
extension
und Argumentnamerange
Diese Erweiterung verwendet
Range
undClosedRange
Tests:
quelle