#swift #string #reverse
Вопрос:
Я пытаюсь отменить sring, и, похоже, в этом случае у меня есть некоторые успехи:
let sampleSentence = "I like to learn Swift" func reverseWordsInSentence(sentence: String) -gt; String { var sentence = sentence sentence.enumerateSubstrings(in: sentence.startIndex..., options: .byWords) { _, range, _, _ in sentence.replaceSubrange(range, with: sentence[range].reversed()) } return sentence }
Но я пытаюсь пойти дальше и убедиться, что обратная сторона строки не влияет , например, на числа:
let sampleSentence = "Test 1, I like to learn Swift 24/7"
теперь у меня есть результат:
print(reverseWordsInSentence(sentence: sampleSentence)) // 1tseT, I ekil ot nrael tfiwS 42/7
моя цель-добиться результатов:
print(reverseWordsInSentence(sentence: sampleSentence)) // tseT1, I ekil ot nrael tfiwS 24/7
Буду рад любым подсказкам!
Комментарии:
1. вы можете просто пропустить
reverse
алгоритм, если он не является символьным.2. Вам понадобится более точное определение для вашего алгоритма, чем «не влияет на числа». Например, каким должен быть результат, когда цифры и буквы смешиваются?
I like to learn Swift 24hours/7days!
Должно24hours/7days
быть24hours/7days
,24sruoh/7syad
,syad7/hours24
,24/sruoh7days
или что-то еще? И куда им следует!
идти?3. @RobNapier ты прав. если у меня есть номер ald lettrs, смешайте, например: Мне нравится учиться быстро 24 часа/7 дней! должно быть 24sruoh/7syad
Ответ №1:
Вы можете добавить проверку внутри закрытия и просто вернуть, если подстрока содержит все числа
guard let string = string, !string.allSatisfy(.isNumber) else { return }
Полный код
func reverseWordsInSentence(sentence: String) -gt; String { var sentence = sentence sentence.enumerateSubstrings(in: sentence.startIndex..., options: .byWords) { string, range, _, _ in guard let string = string, !string.allSatisfy(.isNumber) else { return } sentence.replaceSubrange(range, with: sentence[range].reversed()) } return sentence }