367 votes

Comment utiliser des indices de découpage en chaîne dans Swift 4?

J'ai le code simple suivant écrit dans Swift 3:

 let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)
 

À partir de Xcode 9 beta 5, je reçois l'avertissement suivant:

' substring(to:) ' est obsolète: veuillez utiliser l'indice de tranchage String avec un opérateur 'plage partielle à partir de'.

Comment utiliser cet indice de tranchage avec plage partielle dans Swift 4?

436voto

Tamás Sengel Points 25414

Vous devriez laisser un côté vide, d'où le nom de "partielle de la gamme".

let newStr = str[..<index]

Il en est de même pour les partiels gamme d' opérateurs, il suffit de laisser l'autre côté vide:

let newStr = str[index...]

Gardez à l'esprit que ces opérateurs de plages de retour d'un Substring. Si vous souhaitez convertir une chaîne de caractères, utilisez Strings'fonction d'initialisation:

let newStr = String(str[..<index])

Vous pouvez lire plus au sujet de la nouvelle sous-chaînes ici.

298voto

Conversion de sous-chaîne (Swift 3) en Tranche de chaîne (Swift 4)

Exemples dans Swift 3, 4:

 let newStr = str.substring(to: index) // Swift 3
let newStr = String(str[..<index]) // Swift 4
 

 let newStr = str.substring(from: index) // Swift 3
let newStr = String(str[index...]) // Swift 4 
 

 let range = firstIndex..<secondIndex // If you have a range
let newStr = = str.substring(with: range) // Swift 3
let newStr = String(str[range])  // Swift 4
 

134voto

dimpiax Points 96

Swift 4

Usage

 let text = "Hello world"
text[...3] // "Hell"
text[6..<text.count] // world
text[NSRange(location: 6, length: 3)] // wor
 

Code

 import Foundation

extension String {
  subscript(value: NSRange) -> Substring {
    return self[value.lowerBound..<value.upperBound]
  }
}

extension String {
  subscript(value: CountableClosedRange<Int>) -> Substring {
    get {
      return self[index(at: value.lowerBound)...index(at: value.upperBound)]
    }
  }

  subscript(value: CountableRange<Int>) -> Substring {
    get {
      return self[index(at: value.lowerBound)..<index(at: value.upperBound)]
    }
  }

  subscript(value: PartialRangeUpTo<Int>) -> Substring {
    get {
      return self[..<index(at: value.upperBound)]
    }
  }

  subscript(value: PartialRangeThrough<Int>) -> Substring {
    get {
      return self[...index(at: value.upperBound)]
    }
  }

  subscript(value: PartialRangeFrom<Int>) -> Substring {
    get {
      return self[index(at: value.lowerBound)...]
    }
  }

  func index(at offset: Int) -> String.Index {
    return index(startIndex, offsetBy: offset)
  }
}
 

82voto

ilnur Points 333

Plus court dans Swift 4:

 var string = "123456"
string = String(string.prefix(3)) //"123"
string = String(string.suffix(3)) //"456"
 

29voto

Thyerri Mezzari Points 329

La conversion de votre code en Swift 4 peut également être effectuée de la manière suivante:

 let str = "Hello, playground"
let index = str.index(of: ",")!
let substr = str.prefix(upTo: index)
 

Vous pouvez utiliser le code ci-dessous pour créer une nouvelle chaîne:

 let newString = String(str.prefix(upTo: index))
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X