Czy jest coś takiego jak metoda startedWith () lub coś podobnego w Swift?
Zasadniczo próbuję sprawdzić, czy określony ciąg zaczyna się od innego. Chcę też, żeby nie rozróżniała wielkości liter.
Jak być może jesteś w stanie stwierdzić, po prostu próbuję wykonać prostą funkcję wyszukiwania, ale wydaje mi się, że nie udaje mi się to.
Oto, co chciałbym:
wpisanie „sa” powinno dać mi wyniki dla „San Antonio”, „Santa Fe” itp. wpisanie „SA” lub „Sa” lub nawet „sA” powinno również zwrócić „San Antonio” lub „Santa Fe”.
Używałem
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
przed iOS9 i działało dobrze. Jednak po aktualizacji do iOS9 przestał działać, a teraz wyszukiwania uwzględniają wielkość liter.
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 ");
}
Odpowiedzi:
użyj
hasPrefix
zamiaststartsWith
.Przykład:
źródło
"string".lowercased()
tutaj jest implementacja rozszerzenia Swift programu launchWith:
Przykładowe użycie:
źródło
Aby odpowiedzieć konkretnie na dopasowywanie prefiksów bez rozróżniania wielkości liter :
w czystym Swift (zalecane przez większość czasu)
lub:
uwaga: dla pustego prefiksu
""
zwrócą się obie implementacjetrue
za pomocą Foundation
range(of:options:)
uwaga: dla pustego prefiksu
""
zwrócifalse
i bycie brzydkim z wyrażeniem regularnym (widziałem to ...)
uwaga: dla pustego prefiksu
""
zwrócifalse
źródło
W Swift 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Element
zostaną wprowadzone.Przykładowe zastosowanie:
źródło
Edycja: zaktualizowano dla Swift 3.
Klasa Swift String ma metodę uwzględniającą wielkość liter
hasPrefix()
, ale jeśli chcesz, aby wyszukiwanie nie uwzględniało wielkości liter, możesz użyć metody NSStringrange(of:options:)
.Uwaga: Domyślnie metody NSString nie są dostępne, ale jeśli
import Foundation
tak jest.Więc:
Opcje mogą być podane jako albo
.caseInsensitive
albo[.caseInsensitive]
. Drugiego użyłbyś, gdybyś chciał skorzystać z dodatkowych opcji, takich jak:To podejście ma również tę zaletę, że podczas wyszukiwania można używać innych opcji, takich jak
.diacriticInsensitive
wyszukiwania. Tego samego rezultatu nie można osiągnąć po prostu używając. lowercased()
na strunach.źródło
Wersja Swift 3:
źródło
.anchored
. Zobacz moją odpowiedź lub odpowiedź Olivera Atkinsona.W Swift 4 z rozszerzeniami
Mój przykład rozszerzenia zawiera 3 funkcje: sprawdź, czy String zaczyna się od subString, czy String kończy się na subString i czy String zawiera subString.
Ustaw parametr isCaseSensitive na false, jeśli chcesz zignorować znaki „A” lub „a”, w przeciwnym razie ustaw go na true.
Zobacz komentarze w kodzie, aby uzyskać więcej informacji o tym, jak to działa.
Kod:
Przykłady użycia:
Aby sprawdzić, czy łańcuch znaków zaczyna się od „TEST”:
Aby sprawdzić, ciąg znaków zaczyna się od „test”:
Aby sprawdzić, czy łańcuch kończy się znakiem „G123”:
Aby sprawdzić, czy łańcuch kończy się na „g123”:
Aby sprawdzić, czy ciąg zawiera „RING12”:
Aby sprawdzić, czy łańcuch zawiera „ring12”:
źródło