2016-06-28 8 views
17

範囲を作成することはできません私はすでにスウィフト2に持っていたスウィフト3の範囲を作るしようとしていますが、それは私にこのエラーを与え続け: String may not be indexed with 'Int', it has variable size elementsはスウィフト3

ここに私のコードです:

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

expiredRangeはスウィフト2ではRange<Index>?

で、私が持っていた:

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

答えて

40

Swift 3では、「コレクションはインデックスを移動します」、Swiftの進化については A New Model for Collections and Indicesを参照してください。

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

方法は今特性lower/upperBoundを有する 範囲(から新しいインデックスを計算する文字列で呼び出され

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

:ここ

は、文字列の範囲とインデックスの一例です start/endIndexの代わりに)。