Как получить первые или последние несколько символов строки в цепочке методов?

Если я использую цепочки методов функционального стиля для манипулирования строками, я не могу использовать обычный механизм для получения первых или последних нескольких символов: у меня нет доступа к ссылке на текущую строку, поэтому я не могу вычислить индексы.

Пример:

[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
        }
    }
}

Взятие с конца похоже.

Найти полный код (включая варианты) и тесты здесь.

Другие вопросы по тегам