String+WordCount.swift 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import Foundation
  2. extension String {
  3. var wordCount: Int {
  4. let trimmed = trimmingCharacters(in: .whitespacesAndNewlines)
  5. guard !trimmed.isEmpty else { return 0 }
  6. return trimmed
  7. .components(separatedBy: .whitespacesAndNewlines)
  8. .filter { !$0.isEmpty }
  9. .count
  10. }
  11. func truncated(toMaxWords maxWords: Int) -> String {
  12. guard maxWords > 0 else { return "" }
  13. guard wordCount > maxWords else { return self }
  14. var count = 0
  15. var index = startIndex
  16. while index < endIndex {
  17. while index < endIndex, self[index].isWhitespace {
  18. index = self.index(after: index)
  19. }
  20. guard index < endIndex else { break }
  21. count += 1
  22. while index < endIndex, !self[index].isWhitespace {
  23. index = self.index(after: index)
  24. }
  25. if count >= maxWords {
  26. return String(self[..<index])
  27. }
  28. }
  29. return self
  30. }
  31. }