No Objective-C
código para verificar uma substring em um NSString
é:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
Mas como faço isso no Swift?
Respostas:
Você pode fazer exatamente a mesma ligação com o Swift:
Swift 4 e Swift 5
No Swift 4 String há uma coleção de
Character
valores, não era assim no Swift 2 e 3, então você pode usar este código mais conciso 1 :Swift 3.0+
Swift mais antigo
Espero que seja uma solução útil, já que algumas pessoas, inclusive eu, encontraram alguns problemas estranhos ligando
containsString()
. 1 1PS. Não esqueça de
import Foundation
Notas de rodapé
fonte
An NSRange structure giving the location and length in the receiver of the first occurrence of aString. Returns {NSNotFound, 0} if aString is not found or is empty (@"").
Portanto, talvez apenas a verificaçãonil
não funcione corretamente.{NSNotFound, 0}
ele seja representado para você como nulo. Se for um intervalo real, ele será representado para você como um Swift Range (opcional). Legal.NSString
é.rangeOfString()
. Este está chamandoString
's.rangeOfString()
, que é declarado comofunc rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
Maneira da extensão
Swift 4
Geralmente, o Swift 4 contém o método, mas está disponível no iOS 8.0 ou posterior
Swift 3.1
Você pode escrever extensão
contains:
econtainsIgnoringCase
paraString
Versão Swift mais antiga
Exemplo:
fonte
Foundation
perto ...containsString
funciona bem.A partir dos documentos, parece que chamar
containsString()
uma String deve funcionar:No entanto, não parece funcionar dessa maneira.
Se você tentar usar
someString.containsString(anotherString)
, você receberá um erro de tempo de compilação informando'String' does not contain a member named 'containsString'
.Portanto, você tem algumas opções, uma das quais é explicitamente conectar-se
String
ao Objective-C usandobridgeToObjectiveC()
outras duas que envolvam explicitamente o uso de umNSString
e a final envolve converter oString
para umNSString
Ao fazer a ponte, você obtém:
Digitando explicitamente a string como um
NSString
, você obtém:Se você já possui um
String
, pode inicializar um NSString usando NSString (string :):E, finalmente, você pode converter um existente
String
em umNSString
como abaixofonte
[__NSCFString containsString:]: unrecognized selector sent to instance
. Além disso, eu não posso encontrar o métodocontainsString
nos docs dev para confirmar se o seu novo para iOS 8.Outro. Oferece suporte a opções de maiúsculas e minúsculas.
Swift 3.0
Uso
iOS 9 ou superior
Função insensível a maiúsculas e diacríticas disponível desde o iOS 9.
fonte
A partir do Xcode 7.1 e Swift 2.1
containsString()
está funcionando bem para mim.Swift 4:
E um exemplo Swift 4 que não diferencia maiúsculas de minúsculas:
Ou usando uma
String
extensão que não diferencia maiúsculas de minúsculas :fonte
import Foundation
, caso contrário isso não funcionará.import UIKit
deimport Foundation
é necessária, pelo menos com iOS 11 e Swift 4.No Swift 4.2
Usar
Exemplo
fonte
> NO SWIFT 3.0
Resultado
fonte
Você pode fazer isso com muita facilidade no Swift usando o código:
fonte
Apenas um adendo às respostas aqui.
Você também pode fazer um teste sem distinção entre maiúsculas e minúsculas usando:
Exemplo:
ATUALIZAR
Isso faz parte do Foundation Framework para iOS e Mac OS X 10.10.xe fazia parte do 10.10 no momento da postagem original.
fonte
Aqui está minha primeira facada nisso no playground rápido. Estendo String fornecendo duas novas funções (contains e containsIgnoreCase)
Use-o assim
Gostaria de receber qualquer feedback :)
fonte
De todas as respostas aqui, acho que elas não funcionam ou são um pouco hackeadas (voltando ao NSString). É muito provável que a resposta correta para isso tenha mudado com as diferentes versões beta.
Aqui está o que eu uso:
O "! = Nil" foi necessário no Beta 5.
fonte
Olha Você aqui:
fonte
Você não precisa escrever nenhum código personalizado para isso. A partir da versão 1.2, o Swift já teve todos os métodos que você precisa:
count(string)
;contains(string, substring)
;startsWith(string, substring)
fonte
Em Swift 3
fonte
Aqui está! Pronto para o Xcode 8 e Swift 3.
fonte
string.containsString está disponível apenas na versão 10.10 Yosemite (e provavelmente iOS8). Também a ponte para ObjectiveC falha no 10.9. Você está tentando passar um NSString para NSCFString. Não sei a diferença, mas posso dizer 10.9 barfs ao executar esse código em um aplicativo OS X 10.9.
Aqui estão as diferenças no Swift com 10.9 e 10.10: https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html containsString está disponível apenas na 10.10
O Range of String acima funciona muito bem no 10.9. Estou descobrindo que o desenvolvimento no 10.9 é super estável com o Xcode beta2. Não uso playgrounds nem a versão de linha de comando dos playgrounds. Estou descobrindo se as estruturas adequadas são importadas, o preenchimento automático é muito útil.
fonte
Com e nova sintaxe no swift 4, você pode apenas
string.contains("Swift 4 is the best")
string é sua variável de string
fonte
Versão Xcode 8 / Swift 3:
Você também pode usar
contains
:fonte
Verifique se ele contém 'Hello'
fonte
Swift 4 maneira de verificar se há substrings, incluindo a importação de estrutura
Foundation
(ouUIKit
) necessária :A menos que
Foundation
(ouUIKit
) a estrutura seja importada,str.contains("Can")
ocorrerá um erro do compilador.Esta resposta está regurgitando a resposta dos manojlds , que está completamente correta. Não tenho ideia de por que tantas respostas passam por tantos problemas para recriar
Foundation
oString.contains(subString: String)
método.fonte
fonte
Swift 3: aqui você pode ver minha extensão de pesquisa inteligente para string, que permite fazer uma pesquisa em uma string para ver se ela contém ou talvez para filtrar uma coleção com base em um texto de pesquisa.
https://github.com/magonicolas/Swift-Smart-String-Search
fonte
No iOS 8 e mais recente, você pode usar estes dois
NSString
métodos:fonte
Encontrei alguns casos de uso interessantes. Essas variantes fazem uso do método rangeOfString e incluo o exemplo de igualdade para mostrar como alguém pode usar melhor os recursos de pesquisa e comparação de Strings no Swift 2.0
fonte
Se você quiser verificar se uma String contém outra Sub-String dentro dela ou não, você também pode verificá-la assim,
Agora, nessa sequência específica, se você quiser saber se ela contém o nome da fruta 'maçã' ou não,
Espero que funcione para voce.
fonte
Você pode apenas fazer o que você mencionou:
Dos documentos:
Você precisa
import Foundation
conectar osNSString
métodos e disponibilizá-los para a classe String do Swift.fonte
SWIFT 4 é muito fácil !!
fonte
$ swift Welcome to Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1). Type :help for assistance. 1> print ("Ping") Ping 2> Print ("Ping") error: repl.swift:2:1: error: use of unresolved identifier 'Print' Print ("Ping") ^~~~~
Fornecendo uma resposta não testada que não funciona. Imprimir! = Imprimir.