| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import Foundation
- extension String {
- var wordCount: Int {
- let trimmed = trimmingCharacters(in: .whitespacesAndNewlines)
- guard !trimmed.isEmpty else { return 0 }
- return trimmed
- .components(separatedBy: .whitespacesAndNewlines)
- .filter { !$0.isEmpty }
- .count
- }
- func truncated(toMaxWords maxWords: Int) -> String {
- guard maxWords > 0 else { return "" }
- guard wordCount > maxWords else { return self }
- var count = 0
- var index = startIndex
- while index < endIndex {
- while index < endIndex, self[index].isWhitespace {
- index = self.index(after: index)
- }
- guard index < endIndex else { break }
- count += 1
- while index < endIndex, !self[index].isWhitespace {
- index = self.index(after: index)
- }
- if count >= maxWords {
- return String(self[..<index])
- }
- }
- return self
- }
- }
|