web-dev-qa-db-fra.com

Impossible de créer une plage dans Swift 3

J'essaie de créer une plage dans Swift 3 que j'avais déjà dans Swift 2 mais cela continue de me donner cette erreur: String may not be indexed with 'Int', it has variable size elements

Voici mon code:

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

expiredRange est un Range<Index>?

Dans Swift 2, j'avais:

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

Dans Swift 3, "Les collections déplacent leur index", voir n nouveau modèle pour les collections et les indices on Swift evolution.

Voici un exemple pour les plages de chaînes et les indices:

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

Le

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

est appelée sur la chaîne pour calculer les nouveaux indices à partir de la plage (qui a les propriétés lower/upperBound maintenant au lieu de start/endIndex).

40
Martin R