2016-01-27 21 views
7

Ho ricevuto questo errore e sono nuovo a Swift. Voglio prendere gli ultimi 5 punti di un array> = 5 e passare quei 5 punti come argomento di matrice a una funzione. Come posso ottenere questo risultato e superare questo errore?Errore Swift: impossibile convertire il valore di tipo 'ArraySlice' nel tipo di argomento previsto

Impossibile convertire il valore di tipo 'ArraySlice' al tipo di argomento previsto '[CGPoint]'

if (self.points?.count >= 5) { 
    let lastFivePoints = self.points![(self.points!.count-5)..<self.points!.count] 
    let angle = VectorCalculator.angleWithArrayOfPoints(lastFivePoints) 
} 
+3

prova 'Array (yourArraySlice)' –

+1

Possibile duplicato di [Come ottenere un subArray da Swift 2.0] (http://stackoverflow.com/questions/33060238/how-to-get-a-subarray-from-swift-2 -0) – Moritz

risposta

12

è necessario convertire ArraySlice a Array utilizzando il metodo Array(Slice<Type>)

if (self.points?.count >= 5) { 
    let lastFivePoints = Array(self.points![(self.points!.count-5)..<self.points!.count]) 
    let angle = VectorCalculator.angleWithArrayOfPoints(lastFivePoints) 
} 
1

anziché l'operatore gamma è possibile utilizzare il metodo prefix (upTo end: Self.Index) che restituisce ArraySlice che rende il codice più breve. Definizione del metodo: il metodo restituisce una sottosequenza dall'inizio della raccolta fino a, esclusa la posizione specificata (indice).

if (self.points?.count >= 5) { 
    let lastFivePoints = Array<CGPoint>(self.points?.prefix(upTo:5)) as [AnyObject] 
    let angle = VectorCalculator.angleWithArrayOfPoints(lastFivePoints) 
} 

// You can also do this 

let lastFivePoints = Array<CGPoint>(self.points?[0...4]) 
0

Ho provato ad utilizzare Array(lastFivePoints) ma ho ottenuto l'errore

Type of expression is ambiguous without more context

enter image description here

ho finito per fare:

let arr = lastFivePoints.map({ (x) -> T in 
          return x 
         }) 

dove T è la classe di contenuto CGPoint per questo esempio

Problemi correlati