web-dev-qa-db-ja.com

Swift 3の範囲を作成できません

Swift 3で既に持っていた範囲をSwift 2にしようとしていますが、このエラーが発生し続けます:String may not be indexed with 'Int', it has variable size elements

ここに私のコードがあります:

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

expiredRangeはRange<Index>?

Swift 2、私は持っていた:

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

Swift 3、「コレクションはインデックスを移動します」を参照してください。 コレクションとインデックスの新しいモデル on Swift evolution。

文字列の範囲とインデックスの例を次に示します。

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

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

メソッドは、文字列に対して呼び出され、範囲(プロパティlower/upperBoundの代わりにstart/endIndex)。

40
Martin R