2014-09-18 19 views
14

Avendo un po 'di problemi rintracciare l'equivalente di Swift:Equivalente Swift di removeObjectsInRange:

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

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

vedo che Swift ha una chiamata API: typealias NSRange = _NSRange ma non ho passato che parte. Qualsiasi aiuto?

risposta

27

Oltre alla risposta di Antonio, si può anche semplicemente usare l'operatore gamma:

var array = [0, 1, 2, 3, 4, 5] 
array.removeRange(1..<3) 
// array is now [0, 3, 4, 5] 
  • Il L'operatore di intervallo mezzo chiuso (1..<3) include 1, fino a 3 escluso (quindi 1-2).
  • Un operatore di gamma completa (1...3) include 3 (quindi 1-3).
+0

cosa significa 1 .. <3? (in inglese) significa da 1 a 1,2 o 3 a seconda della lunghezza dell'array? – Jeef

+2

+1 è una versione più compatta, consigliata quando l'intervallo non viene riutilizzato – Antonio

+1

@Jeef: è spiegato in [Operatori intervallo] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ BasicOperators.html # // apple_ref/doc/uid/TP40014097-CH6-XID_126) - 1 .. <3 significa da 1 (incluso) a 3 (non incluso), mentre 1 ... 3 è incluso – Antonio

4

utilizzare il metodo removeRange delle matrici rapide, che richiede un'istanza del Range struct per definire l'intervallo:

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

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

Questo codice rimuove tutti gli elementi della matrice di indice 0 (compreso) fino a indice 1 (non incluso)

Swift 3

Come suggerito dal @bitsand, il codice di cui sopra è deprecato. Può essere sostituito con:

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

o, più sinteticamente:

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

Per il meglio o il peggiore di init (start: end :) è deprecato in Swift 3 e l'avviso presentato da Xcode suggerisce invece di utilizzare l'operatore ".. <". Ad alcuni potrebbe mancare lo stile un po 'più verboso ma più chiaro. – bitsand