Se ho una stringa:
let str = "Hello world"
Sembra abbastanza ragionevole poter estrarre un personaggio:
let thirdChar = str[3]
Tuttavia, non è legale. Invece, devo usare la sintassi estremamente ottusa:
let thirdChar = str[str.index(str.startIndex, offsetBy: 2)]
Allo stesso modo, perché% non è str[0..<3]
o str[0...2]
legale? L'intento è chiaro.
È abbastanza facile creare estensioni a String che supportano tali espressioni:
extension String {
//Allow string[Int] subscripting
subscript(index: Int) -> Character {
return self[self.index(self.startIndex, offsetBy: index)]
}
//Allow open ranges like 'string[0..<n]'
subscript(range: Range<Int>) -> Substring {
let start = self.index(self.startIndex, offsetBy: range.lowerBound)
let end = self.index(self.startIndex, offsetBy: range.upperBound)
return self[start..<end]
}
//Allow closed integer range subscripting like 'string[0...n]'
subscript(range: ClosedRange<Int>) -> Substring {
let start = self.index(self.startIndex, offsetBy: range.lowerBound)
let end = self.index(self.startIndex, offsetBy: range.upperBound)
return self[start...end]
}
}
Non dovrebbe essere parte della lingua? Sembra un gioco da ragazzi.