Как получить первые или последние несколько символов строки в цепочке методов?
Если я использую цепочки методов функционального стиля для манипулирования строками, я не могу использовать обычный механизм для получения первых или последних нескольких символов: у меня нет доступа к ссылке на текущую строку, поэтому я не могу вычислить индексы.
Пример:
[some, nasty, objects]
.map( { $0.asHex } )
.joined()
.<first 100>
.uppercased()
+ "..."
для усеченного отладочного вывода.
Так как мне реализовать <first 100>
или я должен разорвать цепь?
1 ответ
Решение
Я не знаю ни одного API, который делает это. К счастью, написание собственного - это простое упражнение:
extension String {
func taking(first: Int) -> String {
if first <= 0 {
return ""
} else if let to = self.index(self.startIndex,
offsetBy: first,
limitedBy: self.endIndex) {
return self.substring(to: to)
} else {
return self
}
}
}
Взятие с конца похоже.
Найти полный код (включая варианты) и тесты здесь.