2016-06-24 1 views
0

Mon application plante parfois lorsqu'elle trouve nil dans une variable NSData. Lorsque je tente de rendre compte de l'erreur, il est dit « Valeur de type » NSData "ne peut jamais être nulle, la comparaison n'est pas autorisé.Swift 2 NSData comme nul

En outre, j'ai initialisé le champ, comme datavar data = NSData() je ne peux pas comprendre où nul ne serait même venu.

if self.data != nil { 
    self.data = data! 
. 
. 
. 
} 

Répondre

1

vous confondez entre la variable d'instance et une variable locale.

  • self.data est la variable d'instance, que vous avez défini ne pas être nul
  • data est une variable locale, peut-être une valeur retournée par une fonction que vous avez appelé. Il est nilable (c.-à-NSData?)

Si je devais faire une supposition, votre code ressemblerait à quelque chose comme ceci:

class MyClas { 
    var data = NSData() 

    func someFunction() { 
     let data = anotherFunction() // This returns an NSData? 
     if self.data != nil { 
      .... 
     } 
    } 
} 

Modifier à ceci:

if data != nil { 
    self.data = data! 
} 

Vous pouvez également utiliser une reliure facultative:

if let data = data { 
    // data is guaranteed to be non-nil in here 
    self.data = data 
} 
1

vous comparez self.data avec nil, pas data. par conséquent, je suppose que vous n'attribuez à self.data.

+0

Le code que vous avez collé n'est-il pas votre code actuel (ou incomplet)? Vous avez essentiellement écrit 'si self.data! = Nil {self.data = NSData()}'. Mais puisque 'self.data' est nul avant de l'assigner, la condition sera fausse. –