Есть ли такая вещь, как метод StartWith () или что-то подобное в Swift?
Я в основном пытаюсь проверить, начинается ли определенная строка с другой строки. Я также хочу, чтобы он не учитывал регистр.
Как вы могли бы сказать, я просто пытаюсь сделать простую функцию поиска, но мне кажется, что мне это не удается.
Это то, что я хотел бы:
ввод "sa" должен дать мне результаты для "Сан-Антонио", "Санта-Фе" и т. д. ввод "SA", "Sa" или даже "sA" также должен возвращать "Сан-Антонио" или "Санта-Фе".
Я использовал
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
до iOS9 и все работало просто отлично. Однако после обновления до iOS9 он перестал работать, и теперь поиск выполняется с учетом регистра.
var city = "San Antonio"
var searchString = "san "
if(city.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("San Antonio starts with san ");
}
var myString = "Just a string with san within it"
if(myString.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("I don't want this string to print bc myString does not start with san ");
}
Ответы:
использовать
hasPrefix
вместоstartsWith
.Пример:
источник
"string".lowercased()
Вот реализация Swift для расширения opensWith:
Пример использования:
источник
Чтобы ответить конкретно на регистр без учета соответствия префиксов:
в чистом Swift (рекомендуется большую часть времени)
или:
примечание: для пустого префикса
""
обе реализации вернутсяtrue
используя Фонд
range(of:options:)
примечание: для пустого префикса
""
он вернетсяfalse
и быть некрасивым с регулярным выражением (я видел это ...)
примечание: для пустого префикса
""
он вернетсяfalse
источник
В Swift 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Element
будут введены.Пример использования:
источник
Редактировать: обновлено для Swift 3.
Класс Swift String имеет метод с учетом регистра
hasPrefix()
, но если вам нужен поиск без учета регистра, вы можете использовать метод NSStringrange(of:options:)
.Примечание: По умолчанию, методы NSString являются не доступны, но если вы
import Foundation
их.Так:
Опции могут быть заданы как
.caseInsensitive
или[.caseInsensitive]
. Вы бы использовали второй, если вы хотите использовать дополнительные параметры, такие как:Этот подход также имеет преимущество, заключающееся в возможности использовать другие параметры поиска, такие как
.diacriticInsensitive
поиск. Тот же результат не может быть достигнут просто с помощью. lowercased()
строк.источник
Версия Swift 3:
источник
.anchored
. Смотрите мой ответ или ответ Оливера Аткинсона.В Swift 4 с расширениями
Мое разгибание пример содержит 3 функции: проверку сделать строки начать с подстрокой, сделать строковый конец к подстроке и сделать Строку содержит подстроку.
Установите для параметра isCaseSensitive значение false, если вы хотите игнорировать символы «A» или «a», в противном случае установите для него значение true.
Смотрите комментарии в коде для получения дополнительной информации о том, как это работает.
Код:
Примеры как использовать:
Для проверки начинайте String с «TEST»:
Для проверки String начинаем с «test»:
Для проверки конец строки следует на «G123»:
Для проверки конец строки следует на «g123»:
Для проверки строка содержит «RING12»:
Для проверки в строке есть «ring12»:
источник