2015-05-03 21 views
10

Aby wyjąć podciąg w określonym zakresie, należy użyć removeRange (_ :) metody:Zrozumienie removeRange (_ :) dokumentację

1 let range = advance(welcome.endIndex, -6)..<welcome.endIndex 
2 welcome.removeRange(range) 
3 println(welcome) 
4 // prints "hello" 

Fragment z: Apple Inc. „Swift Programming Language . "IBooks. https://itun.es/ca/jEUH0.l

Cześć,

nie w pełni zrozumieć składnię i funkcję linii 1 w powyższym kodzie.

Proszę wyjaśnić stosując ten ciąg:

let welcome = "hello there" 

to co mam wypracowane "Aby zmienić indeks początkowy i końcowy, należy advance()"


Od: https://stackoverflow.com/a/24045156/4839671

Lepszym dokumentacja advance() jest mile widziane. to znaczy, że to argumenty

Wpisz ..< wykonać serię które są pomijane jej górna wartość

Fragment z: „Swift Programming Language” Apple Inc. iBooks. https://itun.es/ca/jEUH0.l

welcome.endIndex będzie 11

+0

Na czym polega trudność? Łańcuchy mają wartość startIndex i endIndex. Musisz zwiększyć/zmniejszyć je z góry. Zakres jest podobny do '' ... '' lub 'index' .. <''. –

+0

Nie wiedziałem, że zmienne (lub stałe) mogą zawierać zakresy. –

Odpowiedz

14

Swift 2

Będziemy używać var od czasu removeRange musi działać na zmienny łańcucha.

var welcome = "hello there" 

Linia:

let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex 

oznacza, że ​​zaczynamy od końca łańcucha (welcome.endIndex) i przenieść z powrotem przez 6 znaków (Wczesny przez liczbę ujemną = ruch do tyłu), a następnie poprosić o zakres (..<) pomiędzy naszą pozycją a końcem ciągu (welcome.endIndex).

Tworzy zakres 5..<11, który obejmuje "tam" część ciągu.

Jeśli usuniesz ten zakres znaków z ciągiem z:

welcome.removeRange(range) 

następnie ciąg będzie pozostała część:

print(welcome) // prints "hello" 

możesz zabrać go w drugą stronę (z indeks początkowy ciągu) dla tego samego wyniku:

welcome = "hello there" 
let otherRange = welcome.startIndex.advancedBy(5)..<welcome.endIndex 
welcome.removeRange(otherRange) 
print(welcome) // prints "hello" 

Tutaj zaczynamy od początku ciągu znaków (welcome.startIndex), następnie przesuwamy o 5 znaków, a następnie tworzymy zakres (..<) od tego miejsca na końcu ciągu znaków (welcome.endIndex).

Uwaga: funkcja advance może działać do przodu i do tyłu.

Swift 3

Składnia zmieniła ale pojęcia są takie same.

var welcome = "hello there" 
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex 
welcome.removeSubrange(range) 
print(welcome) // prints "hello" 

welcome = "hello there" 
let otherRange = welcome.index(welcome.startIndex, offsetBy: 5)..<welcome.endIndex 
welcome.removeSubrange(otherRange) 
print(welcome) // prints "hello"