Existe uma maneira de verificar seqüências de caracteres para nil
e ""
no Swift? No Rails, eu posso usar blank()
para verificar.
Atualmente, tenho isso, mas parece um exagero:
if stringA? != nil {
if !stringA!.isEmpty {
...blah blah
}
}
Respostas:
Se você está lidando com Strings opcionais, isso funciona:
O
??
operador coalescente nulo retorna o lado esquerdo se não for nulo; caso contrário, retorna o lado direito.Você também pode usá-lo assim para retornar um valor padrão:
fonte
Talvez você possa usar a cláusula if-let-where:
Swift 3:
Swift 2:
fonte
fatal error: unexpectedly found nil while unwrapping an Optional value
mas minha constantestring
possui dados de sequência.if let string = string, !string.isEmpty { /* string is not blank */ }
guard let
é uma alternativa se você quiser encerrar o fluxo de controle abaixo da instrução. No entanto nada está sendo desembrulhou na cláusula where aqui (o é uma negação booleana!)Se você estiver usando o Swift 2, aqui está um exemplo que meu colega sugeriu, que adiciona a propriedade isNilOrEmpty nas Strings opcionais:
Você pode usar isNilOrEmpty na própria sequência opcional
fonte
where Wrapped:
deve especificar um protocolo e não um tipo.isNilOrEmpty
ahasValue
(ou algo parecido) e inverter a lógicaUsando a
guard
declaraçãoEu estava usando Swift por um tempo antes de aprender sobre a
guard
declaração. Agora eu sou um grande fã. É usado de forma semelhante àif
declaração, mas permite retorno antecipado e apenas cria um código muito mais limpo em geral.Para usar guarda ao verificar para garantir que uma sequência não seja nula nem vazia, você pode fazer o seguinte:
Isso desembrulha a cadeia opcional e verifica se ela não está vazia de uma só vez. Se for nulo (ou vazio), você retornará da sua função (ou loop) imediatamente e tudo depois que ela for ignorada. Mas se a declaração de guarda for aprovada, você poderá usar com segurança sua corda não embrulhada.
Veja também
fonte
nil
vazia ou não, não se deseja chamarprint(myString)
. Se você precisasse continuar a execução após umnil
ou vazioString
, usaria emif let
vez deguard
.Com o Swift 5, você pode implementar uma
Optional
extensão para oString
tipo com uma propriedade booleana que retorna se uma sequência opcional não tiver valor ou estiver vazia:No entanto,
String
implementa aisEmpty
propriedade conforme o protocoloCollection
. Portanto, podemos substituir restrição genérica do código anterior (Wrapped == String
) com um mais amplo (Wrapped: Collection
) para queArray
,Dictionary
eSet
também beneficiar o nosso novoisNilOrEmpty
imóvel:Uso com
String
s:Uso com
Array
s:Fontes:
fonte
isNilOrEmpty
daisEmptyOrNil
para coincidir com o prefixo por isso é facilmente encontrável via o mesmo padrão para preenchimento automático. Percebi mais adoção dessa extensão por parte dos colegas com quem trabalho, apenas por encontrá-la dessa maneira.fonte
Eu sei que existem muitas respostas para essa pergunta, mas nenhuma delas parece ser tão conveniente quanto esta (na minha opinião) para validar
UITextField
dados, que é um dos casos mais comuns de uso:Você pode apenas usar
Você também pode pular a opção
.trimmingCharacters(in:.whitespaces)
se não considerar espaços em branco como uma sequência vazia ou usá-la para testes de entrada mais complexos, comofonte
Eu recomendaria.
map
aplica-se o argumento da função se o opcional é.Some
.A captura do playground também mostra outra possibilidade com o novo Swift 1.2, se for permitido o encadernação.
fonte
Se você deseja acessar a string como não opcional, use a resposta de Ryan , mas se você se importa apenas com o não vazio da string, minha abreviação preferida para isso é
Como
==
funciona bem com booleanos opcionais, acho que isso deixa o código legível sem obscurecer a intenção original.Se você quiser verificar o oposto: se a string for
nil
or""
, eu prefiro verificar os dois casos explicitamente para mostrar a intenção correta:fonte
SWIFT 3
Use assim na sequência opcional:
fonte
Swift 3 Para verificar a melhor maneira de String vazia
fonte
Você pode criar sua própria função personalizada, se isso é algo que você espera fazer muito.
fonte
Solução Swift 3 Use o valor desembrulhado opcional e verifique com o booleano.
fonte
Usando isEmpty
Usando allSatisfy
Usando String opcional
Referência: https://useyourloaf.com/blog/empty-strings-in-swift/
fonte
Crie uma extensão de classe String:
Observe que isso retornará TRUE se a string contiver um ou mais espaços em branco. Para tratar a string em branco como "vazia", use ...
... em vez de. Isso requer fundação.
Use-o assim ...
fonte
Swift 3 Isso funciona bem para verificar se a string está realmente vazia. Porque isEmpty retorna true quando há um espaço em branco.
Exemplos:
fonte
Você deve fazer algo assim:
if !(string?.isEmpty ?? true) { //Not nil nor empty }
O operador coalescente nulo verifica se o opcional não é nulo; caso contrário, verifica sua propriedade; nesse caso, é Vazio. Como esse opcional pode ser nulo, você fornece um valor padrão que será usado quando o opcional for nulo.
fonte
Esta é uma solução geral para todos os tipos que estão em conformidade com o
Collection
protocolo, que incluiString
:fonte
Ao lidar com a passagem de valores do banco de dados local para o servidor e vice-versa, eu estava tendo muitos problemas com? E! E se não.
Então, eu criei um utilitário Swift3.0 para lidar com casos nulos e quase totalmente posso evitar? E! No código.
Ex:-
Antes :
Depois de :
e quando for necessário verificar uma sequência válida,
Isso me salvou de ter que lidar com o problema de adicionar e remover vários 's' e! 'S depois de escrever um código que fazia sentido.
fonte
Use o operador ternário (também conhecido como operador condicional
C++ forever!
):if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }
O
stringA!
desembrulhamento forçado acontece apenas quandostringA != nil
, portanto, é seguro. A== false
verbosidade é um pouco mais legível do que outro ponto de exclamação!(stringA!.isEmpty)
.Pessoalmente, prefiro uma forma ligeiramente diferente:
if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }
Na declaração acima, é imediatamente muito claro que o
if
bloco inteiro não é executado quando uma variável énil
.fonte
útil ao obter valor de UITextField e verificar
nil
&empty
stringHeres sua função (quando você toca em um
button
) que obtém a string do UITextField e faz outras coisasIsso cuidará do
nil
valor e também daempty
string.Funcionou perfeitamente bem para mim.
fonte
Na minha opinião, a melhor maneira de verificar a cadeia nula e vazia é fazer a contagem de cadeias.
fonte
você pode usar esta função
fonte
nil
para essa função (exceto objc; nesse caso, ela realmente trava).