Existe algo como um método beginWith () ou algo semelhante no Swift?
Estou basicamente tentando verificar se uma determinada string começa com outra. Eu também quero que isso não faça distinção entre maiúsculas e minúsculas.
Como você pode perceber, estou apenas tentando fazer um simples recurso de pesquisa, mas parece que estou falhando miseravelmente nisso.
Isto é o que eu gostaria:
digitar "sa" deve me dar resultados para "San Antonio", "Santa Fe", etc. digitar "SA" ou "Sa" ou até "sA" também deve retornar "San Antonio" ou "Santa Fe".
Eu estava usando
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
antes do iOS9 e estava funcionando bem. Após a atualização para o iOS9, no entanto, ele parou de funcionar e agora as pesquisas diferenciam maiúsculas de minúsculas.
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 ");
}
Respostas:
use em
hasPrefix
vez destartsWith
.Exemplo:
fonte
"string".lowercased()
aqui está uma implementação da extensão Swift de beginWith:
Exemplo de uso:
fonte
Para responder especificamente a distinção entre maiúsculas e minúsculas correspondência de prefixo que não :
em puro Swift (recomendado na maioria das vezes)
ou:
note: para um prefixo vazio,
""
ambas as implementações retornarãotrue
usando Foundation
range(of:options:)
nota: para um prefixo vazio,
""
ele retornaráfalse
e ser feio com um regex (eu já vi ...)
nota: para um prefixo vazio,
""
ele retornaráfalse
fonte
No rápido 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Element
será introduzido.Exemplo de uso:
fonte
Edit: atualizado para o Swift 3.
A classe Swift String possui o método que diferencia maiúsculas de minúsculas
hasPrefix()
, mas se você deseja uma pesquisa que não diferencia maiúsculas de minúsculas, pode usar o método NSStringrange(of:options:)
.Nota: Por padrão, os métodos NSString não estão disponíveis, mas se você
import Foundation
estiver.Assim:
As opções podem ser dadas como
.caseInsensitive
ou[.caseInsensitive]
. Você usaria o segundo se quisesse usar opções adicionais, como:Essa abordagem também tem a vantagem de poder usar outras opções com a pesquisa, como
.diacriticInsensitive
pesquisas. O mesmo resultado não pode ser alcançado simplesmente usando. lowercased()
as strings.fonte
Versão Swift 3:
fonte
.anchored
. Veja minha resposta ou a resposta de Oliver Atkinson.No Swift 4 com extensões
Minha extensão de exemplo contém 3 funções: Verificação de fazer uma String começar com uma subcadeia, fazer uma String final de uma substring e fazer uma String contém uma subcadeia.
Defina o parâmetro isCaseSensitive como false, se desejar ignorar os caracteres "A" ou "a", caso contrário, defina-o como true.
Veja os comentários no código para obter mais informações sobre como ele funciona.
Código:
Exemplos de como usar:
Para verificar, a String começa com "TEST":
Para verificar, a String começa com "test":
Para verificar, a String termina com "G123":
Para verificar, a String termina com "g123":
Para verificar se a String contém "RING12":
Para verificar se a String contém "ring12":
fonte