¿Hay alguna manera de verificar cadenas para nil
y ""
en Swift? En Rails, puedo usar blank()
para verificar.
Actualmente tengo esto, pero parece excesivo:
if stringA? != nil {
if !stringA!.isEmpty {
...blah blah
}
}
Respuestas:
Si se trata de cadenas opcionales, esto funciona:
El
??
operador de fusión nula devuelve el lado izquierdo si no es nulo; de lo contrario, devuelve el lado derecho.También puede usarlo así para devolver un valor predeterminado:
fuente
Tal vez podría usar la cláusula if-let-where:
Swift 3:
Swift 2:
fuente
fatal error: unexpectedly found nil while unwrapping an Optional value
pero mi constantestring
tiene datos de cadena.if let string = string, !string.isEmpty { /* string is not blank */ }
guard let
es una alternativa si desea finalizar el flujo de control debajo de la declaración. Sin embargo, nada se desenvuelve en la cláusula where aquí (la! Es una negación booleana)Si está utilizando Swift 2, aquí hay un ejemplo que ideó mi colega, que agrega la propiedad isNilOrEmpty en cadenas opcionales:
Luego puede usar isNilOrEmpty en la cadena opcional en sí
fuente
where Wrapped:
debe especificar un protocolo y no un tipo.isNilOrEmpty
ahasValue
(o algo así) y revertir la lógicaUsando la
guard
declaraciónEstuve usando Swift por un tiempo antes de conocer la
guard
declaración. Ahora soy un gran admirador. Se usa de manera similar a laif
declaración, pero permite un retorno temprano y solo genera un código mucho más limpio en general.Para usar la protección al verificar para asegurarse de que una cadena no sea nula ni esté vacía, puede hacer lo siguiente:
Esto desenvuelve la cadena opcional y verifica que no esté vacía de una vez. Si es nulo (o vacío), entonces regresa de su función (o bucle) inmediatamente y todo lo que se ignora después. Pero si se aprueba la declaración de guardia, entonces puede usar con seguridad su cadena sin envolver.
Ver también
fuente
nil
o vacía, uno no querría llamarprint(myString)
. Si necesita continuar la ejecución después de unnil
o vacíoString
, entonces usaría enif let
lugar deguard
.Con Swift 5, puede implementar una
Optional
extensión para elString
tipo con una propiedad booleana que devuelve si una cadena opcional no tiene valor o está vacía:Sin embargo,
String
implementa laisEmpty
propiedad conforme al protocoloCollection
. Por lo tanto, podemos reemplazar la restricción genérica del código anterior (Wrapped == String
) con una más amplia (Wrapped: Collection
) para queArray
,Dictionary
ySet
también beneficiar nuestra nuevaisNilOrEmpty
propiedad:Uso con
String
s:Uso con
Array
s:Fuentes:
fuente
isNilOrEmpty
paraisEmptyOrNil
que coincida con el prefijo para que sea fácil de encontrar a través del mismo patrón para autocompletar. He notado una mayor adopción de esta extensión por parte de los colegas con los que trabajo solo de ellos al encontrarla de esta manera.fuente
Sé que hay muchas respuestas a esta pregunta, pero ninguna de ellas parece ser tan conveniente como esta (en mi opinión) para validar los
UITextField
datos, que es uno de los casos más comunes para usarlo:Puedes usar
También puede omitir el
.trimmingCharacters(in:.whitespaces)
si no considera los espacios en blanco como una cadena vacía o usarlo para pruebas de entrada más complejas comofuente
Yo recomendaria.
map
aplica el argumento de la función si el opcional es.Some
.La captura del patio también muestra otra posibilidad con el nuevo Swift 1.2 si se permite la encuadernación opcional.
fuente
Si desea acceder a la cadena como no opcional, debe usar la Respuesta de Ryan , pero si solo le importa el no vacío de la cadena, mi taquigrafía preferida para esto es
Como
==
funciona bien con booleanos opcionales, creo que esto deja el código legible sin oscurecer la intención original.Si desea verificar lo contrario: si la cadena es
nil
o""
, prefiero verificar ambos casos explícitamente para mostrar la intención correcta:fuente
SWIFT 3
Use así en una cadena opcional:
fuente
Swift 3 Para verificar la cadena vacía de la mejor manera
fuente
Puede crear su propia función personalizada, si eso es algo que espera hacer mucho.
fuente
Solución Swift 3 Utilice el valor sin envolver opcional y compárelo con el valor booleano.
fuente
Usando isEmpty
Usando allSatisfy
Usando cadena opcional
Referencia: https://useyourloaf.com/blog/empty-strings-in-swift/
fuente
Cree una extensión de clase de cadena:
Tenga en cuenta que esto devolverá VERDADERO si la cadena contiene uno o más espacios en blanco. Para tratar la cadena en blanco como "vacía", use ...
... en cambio. Esto requiere Fundación.
Úselo así ...
fuente
Swift 3 Esto funciona bien para verificar si la cadena está realmente vacía. Porque isEmpty devuelve verdadero cuando hay un espacio en blanco.
Ejemplos:
fuente
Deberías hacer algo como esto:
if !(string?.isEmpty ?? true) { //Not nil nor empty }
El operador de fusión nula comprueba si el opcional no es nulo, en caso de que no sea nulo, comprueba su propiedad, en este caso es vacío. Debido a que este opcional puede ser nulo, proporciona un valor predeterminado que se utilizará cuando su opcional sea nulo.
fuente
Esta es una solución general para todos los tipos que se ajustan al
Collection
protocolo, que incluyeString
:fuente
Al tratar de pasar valores de la base de datos local al servidor y viceversa, estaba teniendo demasiados problemas con? Sy! Y qué no.
Así que hice una utilidad Swift3.0 para manejar casos nulos y puedo evitar casi por completo los? Y! En el código.
Ex:-
Antes de :
Después :
y cuando se requiere verificar una cadena válida,
Esto me ahorró tener que pasar por la molestia de agregar y eliminar numerosos? Y después de escribir un código que razonablemente tenga sentido.
fuente
Utilice el operador ternario (también conocido como operador condicional
C++ forever!
):if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }
El
stringA!
desenvolvimiento forzado ocurre solo cuandostringA != nil
, por lo que es seguro. La== false
verbosidad es algo más legible que otro signo de exclamación!(stringA!.isEmpty)
.Personalmente prefiero una forma ligeramente diferente:
if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }
En la declaración anterior, es muy claro de inmediato que el
if
bloque completo no se ejecuta cuando una variable esnil
.fuente
útil para obtener valor de UITextField y verificar
nil
&empty
stringAquí está su función (cuando toca un
button
) que obtiene una cadena de UITextField y hace algunas otras cosasEsto cuidará tanto el
nil
valor comoempty
cadena.Funcionó perfectamente bien para mí.
fuente
En mi opinión, la mejor manera de verificar la cadena nula y vacía es tomar el recuento de cadenas.
fuente
puedes usar esta función
fuente
nil
a esta función (excepto desde objc, en cuyo caso se bloqueará).