Add String utils

master
Peter 7 years ago
parent de4e101672
commit 6bff35b952

@ -27,6 +27,14 @@ struct Tools {
} }
return retVal return retVal
} }
// Assumes THE string is 'polymer'
static func stringIndexRange(withString str: String, fromRange range: Range<Int>) -> Range<String.Index> {
let myrange = Range(uncheckedBounds: (lower: max(0, min(str.length, range.lowerBound)), upper: min(str.length, max(0, range.upperBound))))
let start = str.index(str.startIndex, offsetBy: myrange.lowerBound)
let end = str.index(start, offsetBy: myrange.upperBound - myrange.lowerBound)
return start ..< end
}
} }
extension Character { extension Character {
@ -39,7 +47,41 @@ extension Character {
} }
extension StringProtocol { extension StringProtocol {
// var string: String { return String(self) }
var ascii: [UInt32] { var ascii: [UInt32] {
return compactMap { $0.ascii } return compactMap { $0.ascii }
} }
// subscript(offset: Int) -> Element {
// return self[index(startIndex, offsetBy: offset)]
// }
}
extension String {
var length: Int {
return count
}
subscript (i: Int) -> String {
return self[i ..< i + 1]
}
func substring(fromIndex: Int) -> String {
return self[min(fromIndex, length) ..< length]
}
func substring(toIndex: Int) -> String {
return self[0 ..< max(0, toIndex)]
}
subscript (r: Range<Int>) -> String {
let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
upper: min(length, max(0, r.upperBound))))
let start = index(startIndex, offsetBy: range.lowerBound)
let end = index(start, offsetBy: range.upperBound - range.lowerBound)
return String(self[start ..< end])
}
} }

Loading…
Cancel
Save