Как я могу замаскировать первый и последний символы в Swift?

У меня есть расширение для маскировки первого и последнего символов. Когда я пытаюсь замаскировать последние символы, он работает, но если я пытаюсь замаскировать первые символы, он не маскируется так, как я хочу.

Например;

extension String {
    func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
        if self.count <= charCount {
            return self
        }
        let mask = String(repeating: "*", count: charCount)
        return lastCharacters ? self.prefix(self.count - charCount) + mask : self.suffix(self.count - charCount) + mask
    }
}

let sample = "123456"
print(sample.maskedChar(3))
print(sample.maskedChar(3, lastCharacters: false))

// 123***
// 456***

То, что я хочу видеть, это в основном *** 456.

И еще, есть ли способ сократить код? Обратная линия слишком длинная, чтобы ее увидеть.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы использовал dropFirst/dropLast вместе с mask, который вы создаете

extension String {
    func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
        if self.count <= charCount { return self }

        let mask = String(repeating: "*", count: charCount)
        return lastCharacters ? self.dropLast(charCount) + mask : mask + self.dropFirst(charCount)
    }
}
Ответ принят как подходящий

Довольно просто, правда. Вам просто нужно поменять порядок символов из строки и маски в случае «not lastCharacters»:

extension String {
    func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
        if self.count < charCount {
            return String(repeating: "*", count: self.count)
        }
        let mask = String(repeating: "*", count: charCount)
        if lastCharacters {
            return self.prefix(self.count - charCount) + mask
        } else {
            return mask + self.suffix(self.count - charCount)
        }
    }
}

Обратите внимание, что я также изменил условие if в начале. Мне кажется, нужно ВСЕГДА маскировать данные, даже если исходная строка слишком короткая.

Кроме того, третичный оператор ("?:") может затруднить чтение кода, поэтому я просто переписал его, используя обычный оператор if. Это также разбивает эту часть на более короткие части, чтобы она помещалась на экране.

Duncan C 23.04.2022 13:00

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