Guest User

Untitled

a guest
Oct 19th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. extension StringProtocol where Index == String.Index {
  2. func index(of string: Self, options: String.CompareOptions = []) -> Index? {
  3. return range(of: string, options: options)?.lowerBound
  4. }
  5. func endIndex(of string: Self, options: String.CompareOptions = []) -> Index? {
  6. return range(of: string, options: options)?.upperBound
  7. }
  8. func indexes(of string: Self, options: String.CompareOptions = []) -> [Index] {
  9. var result: [Index] = []
  10. var start = startIndex
  11. while start < endIndex,
  12. let range = self[start..<endIndex].range(of: string, options: options) {
  13. result.append(range.lowerBound)
  14. start = range.lowerBound < range.upperBound ? range.upperBound :
  15. index(range.lowerBound, offsetBy: 1, limitedBy: endIndex) ?? endIndex
  16. }
  17. return result
  18. }
  19. func ranges(of string: Self, options: String.CompareOptions = []) -> [Range<Index>] {
  20. var result: [Range<Index>] = []
  21. var start = startIndex
  22. while start < endIndex,
  23. let range = self[start..<endIndex].range(of: string, options: options) {
  24. result.append(range)
  25. start = range.lowerBound < range.upperBound ? range.upperBound :
  26. index(range.lowerBound, offsetBy: 1, limitedBy: endIndex) ?? endIndex
  27. }
  28. return result
  29. }
  30. }
Add Comment
Please, Sign In to add comment