2016-01-27 19 views
7

Otrzymuję ten błąd i jestem nowy w Swift. Chcę wziąć 5 ostatnich punktów tablicy> = 5 i przekazać te 5 punktów jako argument tablicowy do funkcji. Jak mogę to osiągnąć i uniknąć tego błędu?Błąd Swift: Nie można przekonwertować wartości typu "ArraySlice" na oczekiwany typ argumentu

Nie można przekonwertować wartości typu 'ArraySlice' do oczekiwanego typu argumentu '[CGPoint]'

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

wypróbuj 'Array (yourArraySlice)' –

+1

Możliwy duplikat [Jak uzyskać subArray od Swift 2.0] (http://stackoverflow.com/questions/33060238/how-to-get-a-subarray-from-swift-2 -0) – Moritz

Odpowiedz

12

trzeba konwertować ArraySlice do Array stosując metodę 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

Zamiast operator zakres możesz użyć metody prefix (upTo end: Self.Index), która zwraca ArraySlice, co powoduje, że twój kod jest krótszy. Definicja metody: Metoda zwraca podsekwencję od początku zbierania do określonej pozycji (indeksu), ale bez niej.

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

Próbowałem za pomocą Array(lastFivePoints) ale mam błąd

Type of expression is ambiguous without more context

enter image description here

skończyło się robi:

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

gdzie T jest klasa zawartości CGPoint dla tego przykładu

Powiązane problemy