ios - the - null/nil en un lenguaje rápido
the swift programming language pdf (7)
¿Cómo definiríamos lo siguiente en un lenguaje de programación rápido?
- nulo
- nulo
- Nulo
- [NSNull null]
En otras palabras, ¿cuál sería el equivalente rápido de cada uno de estos términos objetivos c? Además, también me gustaría saber si existen casos de uso específicos para tipos de c no objetivos como estructuras y enumeraciones. Gracias por adelantado.
En cuanto a equivalentes:
-
NULL
no tiene equivalente en Swift. -
nil
también se llamanil
en Swift -
Nil
no tiene equivalente en Swift -
[NSNull null]
se puede acceder en Swift como NSNull ()
Nota: Estas son mis conjeturas basadas en la lectura y el juego. Correcciones bienvenidas.
Pero el manejo nulo / NULL en Swift es muy diferente del objetivo C. Parece diseñado para hacer cumplir la seguridad y la atención. Lea sobre las opciones en el manual . En general, una variable no puede ser NULA en absoluto y cuando necesita representar la "ausencia de un valor" lo hace declarativamente.
nil
significa "sin valor", pero es completamente distinto en cualquier otro sentido desde Objective-C''s nil
.
Se puede asignar solo a las variables opcionales. Funciona con literales y estructuras (es decir, funciona con elementos basados en pila, no solo elementos basados en pila).
Las variables no opcionales no se pueden asignar a nil
incluso si son clases (es decir, viven en el montón).
Por lo tanto, explícitamente no es un puntero NULL
y no es similar a uno. Comparte el nombre porque está destinado a ser utilizado por la misma razón semántica.
El concepto de Null en Swift se reanuda en la enumeración opcional. La enumeración se define así
enum Optional<T> {
case Some(T)
case None
}
Lo que esto significa es que no puedes tener una variable / constante no inicializada en Swift. Si tratas de hacer esto, obtendrás un error del compilador diciendo que la variable / constante no puede ser sin inicializar. Necesitarás envolverlo en la enumeración opcional.
Este es el único concepto nulo que encontrarás en Swift
Swift''s nil
no es lo mismo que nil
en Objective-C.
En Objective-C, nil
es un puntero a un objeto inexistente. En Swift, nil
no es un puntero, es la ausencia de un valor de cierto tipo. Opcionales de cualquier tipo se pueden establecer en nil
, no solo en tipos de objetos.
NULL
no tiene equivalente en Swift.
nil
también se llama nil en Swift
Nil
no tiene equivalente en Swift
[NSNull null]
se puede acceder en Swift como NSNull()
Tuve este problema en un escenario problemático: el paquete de configuración
Para que alguien no pierda su tiempo (¡Como lo perdí!)
let userDefaults = UserDefaults.standard
var settingsValue = userDefaults.string(forKey: "user_preference")
if settingsValue == nil {
settingsValue = "1"
}
if (settingsValue?.isEqual("1"))! {
//Do something
} else {
//Do something
}
Hasta que el usuario abra la configuración de la aplicación por primera vez, el sistema devuelve cero. Y, en mi caso, la aplicación falla .
Si necesita usar un NULL en operaciones de puntero de bajo nivel, use lo siguiente:
UnsafePointer<Int8>.null()
if !(myDATA is NSNull) {
// optional is NOT NULL, neither NIL nor NSNull
} else {
// null
}