2014-09-18 11 views
14

Mając trochę problemów tropienie Swift równowartość:Swift Odpowiednik removeObjectsInRange:

//timeArray and locationArray are NSMutableArrays 
NSRange removalRange = NSMakeRange(0, i); 

[timeArray removeObjectsInRange:removalRange]; 
[locationArray removeObjectsInRange:removalRange]; 

widzę, że Swift ma połączenia w API: typealias NSRange = _NSRange ale nie mam przeszłości tej części. Jakaś pomoc?

Odpowiedz

27

Oprócz odpowiedzi Antonio, można też po prostu użyć operatora zakres:

var array = [0, 1, 2, 3, 4, 5] 
array.removeRange(1..<3) 
// array is now [0, 3, 4, 5] 
  • operator półzamkniętego zakresu (1..<3) zawiera 1, ale nie 3 włącznie (więc 1-2).
  • Operator pełno zakresowy (1...3) obejmuje 3 (czyli 1-3).
+0

co znaczy 1 .. <3? (po angielsku) to znaczy 1 do 1,2 lub 3 w zależności od długości tablicy? – Jeef

+2

+1 to wersja bardziej kompaktowa, zalecana, gdy zakres nie jest ponownie używany – Antonio

+1

@Jeef: wyjaśniono to w [Operatorach zakresu] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ BasicOperators.html # // apple_ref/doc/uid/TP40014097-CH6-XID_126) - 1 .. <3 oznacza od 1 (w zestawie) do 3 (brak w zestawie), a 1 ... 3 zawiera – Antonio

4

pomocą metody removeRange SWIFT macierzy, która wymaga wystąpienia Range struktury w celu określenia zakresu:

var array = [1, 2, 3, 4] 

let range = Range(start: 0, end: 1) 
array.removeRange(range) 

który usuwa wszystkie elementy tablicy z indeksu 0 (włącznie) w górę do indeksie 1 (nie włącznie)

Swift 3

Jak sugeruje @bitsand, powyższy kod jest przestarzała. Może on być zastąpiony:

let range = 0..<1 
array.removeSubrange(range) 

lub bardziej zwięźle:

array.removeSubrange(0..<1) 
+1

Dla lepszego lub gorszego init (start: end :) jest przestarzałe w Swift 3, a ostrzeżenie przedstawione przez Xcode sugeruje użycie zamiast tego operatora ".. <". Niektórym może brakować nieco bardziej gadatliwego, ale czystszego stylu. – bitsand