Обратная строка с правилами исключения

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