18

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

これが私のコードです:

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

期限切れの範囲はRange<Index>?

Swift 2では、次のものがありました:

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

1 に答える 1

40

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

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

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)。

于 2016-06-28T08:05:50.643 に答える