2016-06-28 23 views
17

Sto cercando di fare una serie di Swift 3 che avevo già in Swift 2, ma continua a darmi questo errore: String may not be indexed with 'Int', it has variable size elementsImpossibile creare una gamma di Swift 3

Ecco il mio codice:

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

expiredRange è un Range<Index>?

In Swift 2, ho avuto:

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

risposta

40

In Swift 3, "Le collezioni spostano il proprio indice", vedere A New Model for Collections and Indices sull'evoluzione di Swift.

Ecco un esempio per intervalli di stringa e indici:

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" 
} 

Procedimento

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

è chiamato sulla stringa per calcolare nuovi indici dal gamma (che ha proprietà lower/upperBound ora invece di start/endIndex).

Problemi correlati