Skip to content

Instantly share code, notes, and snippets.

@jamesujeon
Last active November 4, 2021 11:17
Show Gist options
  • Save jamesujeon/1d2d280980ad20fe2c5435266c8ee38b to your computer and use it in GitHub Desktop.
Save jamesujeon/1d2d280980ad20fe2c5435266c8ee38b to your computer and use it in GitHub Desktop.
Subscript `String` using the range expression
import Foundation
extension String {
subscript(range: String.IndexDistance) -> Character {
self[index(at: range)]
}
subscript(range: NSRange) -> Substring {
self[range.lowerBound..<range.upperBound]
}
subscript(range: NSRange) -> String {
String(self[range.lowerBound..<range.upperBound])
}
subscript(range: Range<String.IndexDistance>) -> Substring {
self[index(at: range.lowerBound)..<index(at: range.upperBound)]
}
subscript(range: Range<String.IndexDistance>) -> String {
String(self[index(at: range.lowerBound)..<index(at: range.upperBound)])
}
subscript(range: ClosedRange<String.IndexDistance>) -> Substring {
self[index(at: range.lowerBound)...index(at: range.upperBound)]
}
subscript(range: ClosedRange<String.IndexDistance>) -> String {
String(self[index(at: range.lowerBound)...index(at: range.upperBound)])
}
subscript(range: PartialRangeUpTo<String.IndexDistance>) -> Substring {
self[..<index(at: range.upperBound)]
}
subscript(range: PartialRangeUpTo<String.IndexDistance>) -> String {
String(self[..<index(at: range.upperBound)])
}
subscript(range: PartialRangeThrough<String.IndexDistance>) -> Substring {
self[...index(at: range.upperBound)]
}
subscript(range: PartialRangeThrough<String.IndexDistance>) -> String {
String(self[...index(at: range.upperBound)])
}
subscript(range: PartialRangeFrom<String.IndexDistance>) -> Substring {
self[index(at: range.lowerBound)...]
}
subscript(range: PartialRangeFrom<String.IndexDistance>) -> String {
String(self[index(at: range.lowerBound)...])
}
}
private extension String {
func index(at offset: String.IndexDistance) -> String.Index {
index(startIndex, offsetBy: offset)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment