web-dev-qa-db-fra.com

null/nil en langue Swift

Comment définirions-nous les éléments suivants dans le langage de programmation Swift:

  • nul 
  • néant
  • Néant
  • [NSNull null]

En d’autres termes, quel serait l’équivalent Swift de chacun de ces termes de l’objectif C. En outre, aimerait également savoir s'il existe des cas d'utilisation spécifiques pour les types non Objective C tels que struct et enums Merci d'avance. 

62
Mehul Parmar

En ce qui concerne les équivalents:

  • NULL n'a pas d'équivalent dans Swift. 
  • nil est aussi appelé nil dans Swift
  • Nil n'a pas d'équivalent dans Swift
  • [NSNull null] est accessible dans Swift en tant que NSNull ()

Note: Ce sont mes suppositions basées sur la lecture et le jeu. Les corrections sont les bienvenues.

Mais la gestion des valeurs nil/NULL dans Swift est très différente de l’objectif C. Elle semble conçue pour renforcer la sécurité et les soins. Lisez optionnels dans le manuel . En règle générale, une variable ne peut pas être NULL du tout et lorsque vous devez représenter "l'absence de valeur", vous le faites de manière déclarative.

112
gwcoffey

Si vous devez utiliser une opération NULL à un pointeur de bas niveau, utilisez les éléments suivants:

UnsafePointer<Int8>.null()
19
Rien

nil signifie "aucune valeur" mais est complètement distinct dans tous les autres sens de la variable nil de Objective-C.

Il est assignable uniquement à des variables optionnelles. Il fonctionne à la fois avec des littéraux et des structures (c’est-à-dire avec des éléments basés sur une pile, pas seulement avec des éléments basés sur des tas).

Les variables non facultatives ne peuvent pas être affectées à nil même si elles sont des classes (c'est-à-dire qu'elles vivent sur le tas).

Donc, ce n'est explicitement pas un pointeur NULL et pas semblable à un. Il partage le nom car il est destiné à être utilisé pour la même raison sémantique.

11
Tommy

Le concept de null dans Swift reprend l’énumération facultative. L'énumération est définie comme ceci

enum Optional<T> {
  case Some(T)
  case None
}

Cela signifie que vous ne pouvez pas avoir une variable/constante non initialisée dans Swift. Si vous essayez cela, vous obtiendrez une erreur du compilateur indiquant que la variable/constante ne peut pas être non initialisée. Vous devrez l'envelopper dans l'énumération facultative. 

C’est le seul concept Null que vous trouverez dans Swift

5
Ciprian

La variable nil de Swift n’est pas la même que nil en Objective-C.
En Objective-C, nil est un pointeur sur un objet non existant. Dans Swift, nil n'est pas un pointeur, c'est l'absence d'une valeur d'un certain type. Les options de tout type peuvent être définies sur nil, pas seulement les types d'objet.

NULL n'a pas d'équivalent dans Swift.

nil est également appelé nul dans Swift

Nil n'a pas d'équivalent dans Swift

[NSNull null] peut être consulté dans Swift en tant que NSNull()

4
ChandreshKanetiya

J'ai eu ce problème dans un scénario problématique: le paquet de paramètres

Pour que quelqu'un ne perde pas son temps (Comme je l'ai perdu!)

    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
    }

Tant que l'utilisateur n'a pas ouvert les paramètres de l'application pour la première fois, le système renvoie nil. Et, dans mon cas, l'application se bloque .

0
Markus
if !(myDATA is NSNull) {
// optional is NOT NULL, neither NIL nor NSNull
} else {
// null
}
0
Yakup Ad