2016-03-22 13 views
72

używam następujący kod:'init (start: koniec :)' jest przestarzałe: zostanie ona usunięta w Swift 3. Użyj '.. <' operator

var continousDigitsRange:Range<Int> = Range<Int>(start: 0, end: 0) 

Od aktualizacji do Xcode 7,3 (Swift 2.2) mam następującą wskazówkę:

'init (start: koniec :)' jest przestarzałe: zostanie ona usunięta w Swift 3. Korzystanie '.. <' operator.

Dla mnie nie jest jasne, jak „przetłumaczyć” je prawidłowo „przy użyciu«.. <»operatora.

+0

dla elementu 0 .. Anton

+0

http: // stackoverflow.com/a/30094120/2303865 –

Odpowiedz

88

Trzeba po prostu napisać

var continousDigitsRange1:Range<Int> = 0..<0 

lub jeśli chcesz iść jeszcze prostsze

var continousDigitsRange = 0..<0 
+2

Ci da prawdziwy MVP –

8

zamknięta operator zakresu (a...b) definiuje zakres, który przebiega od do b, i zawiera wartości aib. Wartość a nie musi być większa niż b.

Operator półotwartego zakresu definiuje zakres od do b, ale nie obejmuje b. Mówi się, że jest on w połowie otwarty, ponieważ zawiera on pierwszą wartość, ale nie jego ostateczną wartość. Podobnie jak w przypadku zamkniętego operatora zakresu , wartość a nie może być większa niż b. Jeśli wartość a jest równa b, wynikowy zakres będzie pusty.

The Swift Programming Language (Swift 2.2) - Basic Operators

var continousDigitsRange:Range<Int> = Range<Int>(start: 0, end: 0) 
--to-- 
var continousDigitsRange:Range<Int> = 0..<0 
+1

Ahh, tak, dobry punkt, włączył to - chciał zilustrować opcje zasięgu w szybkim tempie. – solenoid

+0

Co kończy się ciągiemDigitsRange? Wygląda mi na zero. Jaki pożytek z tego zakresu można zastosować? Próbuję się też uczyć! – user462990

35

Warto również zauważyć, aby substringWithRange String, można teraz używać

let theString = "Hello, how are you" 
let range = theString.startIndex.advancedBy(start) ..< theString.startIndex.advancedBy(end) 
theString.substringWithRange(range) 
+1

Jedną małą rzeczą jest to, że jeśli liczysz od końca łańcucha, użyj endIndex zamiast start like poniżej: 'let range = theString.startIndex.advancedBy (start) .. Hamid

2

pokazać odpowiedź bmichotte w pełnym ...

let theString = "Hello, how are you today my friend" 
    let start = 3 
    let end = 15 
    let range = theString.startIndex.advancedBy(start) ..< theString.startIndex.advancedBy(end) 
    let p = theString.substringWithRange(range) 
    print("this is the middle bit>\(p)<") 

to produkuje to jest środkowy kawałek> lo, jak są <

1

Dodanie kilku punktów w odniesieniu do szybkiego 3,0

// policzalnych zasięgiem przykładu.

let range1 = 0..<5

policzalnych Zamknięta Zakres Przykład

let range2 = 0...5 

// Zakres od granic

let range = Range(uncheckedBounds: (range1.lowerBound,range1.upperBound)) 

// Aby uzyskać odległość od substringRange.

let str = "Hello, how are you" 
let substringRange = str.characters.indices 

// Poniżej Swift 3.0

let length = substringRange.distance(from: substringRange.startIndex, to: substringRange.endIndex) 

// Dla Swift 3.0

let length2 = str.distance(from: substringRange.startIndex, to: substringRange.endIndex) 
1

Zawsze miałem funkcję, aby uzyskać zakres podciąg napisu. Tu jest mój zaktualizowany funkcja Swift 3:

func getSubStringRange(fullString: String, fromIndex: Int, subStringSize: Int) -> Range<String.Index> { 
    let startIndex = fullString.characters.index(fullString.startIndex, offsetBy: fromIndex) 
    let endIndex = fullString.characters.index(startIndex, offsetBy: subStringSize) 

    let subStringRange = startIndex..<endIndex 

    return subStringRange 
} 

Funkcja jest dość oczywista - można przejść na sznurku (fullString), indeks tego łańcucha, gdzie rozpoczyna się podciąg (fromIndex) i jak duży podciąg jest (subStringSize).

Przykład:

let greeting = "Hi, my name is Nathaniel" 
let getName = greeting[getSubStringRange(fullString: greeting, fromIndex: 15, subStringSize: 9)] 

print("Name: \(getName)") 

-> Wydruki: "Imię i nazwisko: Nathaniel"

+1

Nie kompiluje się z Swift 3. Brak zamykania ')' after 'subStringSize: Int' – Vladislav

+1

W właściwości 'endIndex' pominąłeś' fullString. 'Przed 'startIndex', więc poprawne byłoby:' let endIndex = fullString.characters.index (fullString.startIndex, offsetBy: subStringSize) ' – Mette

+0

Dzięki chłopaki. Musiałem spać, kiedy to pisałem! Musiałem ręcznie wpisać całą partię, zamiast kopiować/wklejać bezpośrednio z mojego kodu, tak jak byłem na komputerze z systemem Windows podczas wysyłania! – Krivvenz

Powiązane problemy