2016-06-28 15 views
17

Próbuję wykonać serię w Swift 3, które miałem już w Swift 2 ale trzyma daje mi ten błąd: String may not be indexed with 'Int', it has variable size elementsNie można utworzyć zakres w Swift 3

Oto mój kod:

let range = expireRange!.startIndex.advancedBy(n: 7) ..< expireRange!.startIndex.advancedBy(n: 16) 

expiredRange jest Range<Index>?

Swift 2 miałem:

let range = expireRange!.startIndex.advancedBy(7)...expireRange!.startIndex.advancedBy(16) 

Odpowiedz

40

W Swift 3 "Kolekcje zmieniają indeks", zobacz A New Model for Collections and Indices na temat ewolucji Swift.

Oto przykład dla zakresów ciąg i indeksów:

let string = "ABCDEFG" 
if let range = string.range(of: "CDEF") { 
    let lo = string.index(range.lowerBound, offsetBy: 1) 
    let hi = string.index(range.lowerBound, offsetBy: 3) 
    let subRange = lo ..< hi 
    print(string[subRange]) // "DE" 
} 

Sposób

public func index(_ i: Index, offsetBy n: IndexDistance) -> Index 

nazywa na struny do obliczenia nowych wskaźników z zakresu (który ma właściwości lower/upperBound teraz zamiast start/endIndex).