Python のように添え字演算子を介して部分文字列を取得できるようにする Swift の String クラスの拡張機能を作成したいと考えています。これは、次の方法で Range クラスを使用して実現できます。
extension String {
subscript (range: Range<Int>) -> String? {
if range.startIndex < 0 || range.endIndex > count(self) {
return nil
}
let range = Range(start: advance(startIndex, range.startIndex), end: advance(startIndex, range.endIndex))
return substringWithRange(range)
}
}
これにより、次の使用法が可能になります
let string = "OptimusPrime"
string[0...6] // "Optimus"
ただし、負の整数を使用して、文字列の末尾と先頭からインデックスを作成できるようにしたいと考えています。
string[7...(-1)] // "Prim"
Range クラスは上記の拡張startIndex
を超えることを許可しないendIndex
ため、この動作を実現するには不十分です。
Range オブジェクトは明らかにこの拡張機能には使用できないため、Python と同じ構文を単純に使用するのが理にかなっています。
string[0:2] // "Op"
string[0:-1] // "OptimusPrim"
これは可能ですか?どうすればこれを行うことができますか?