2016-06-24 6 views
0

Meine Anwendung stürzt manchmal ab, wenn sie nil in einer NSData-Variable findet. Wenn ich versuche, den Fehler zu erklären, heißt es „Der Wert des Typs“ NSData "kann nie Null sein, direkter Vergleich ist nicht erlaubt.Swift 2 NSData als Null

Auch habe ich das Feld initialisiert, data als var data = NSData() so kann ich nicht verstehen wo nil sogar aus kommen würde.

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

Antwort

1

Sie zwischen den Instanzvariablen und einer lokalen variablen sind verwirrend.

  • self.data ist die Instanz-Variable, die Sie definiert haben, eine lokale Variable nicht null
  • data ist, möglicherweise einen Rückgabewert von einer Funktion, die Sie genannt. Es ist nilable (dh NSData?)

Wenn ich eine Vermutung machen waren, Ihr Code wie folgt aussehen würde:

class MyClas { 
    var data = NSData() 

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

ändern es dazu:

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

Sie können auch eine optionale Bindung verwenden:

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

Sie vergleichen self.data mit nil, nicht data. Daher vermute ich dich nie self.data zuweisen.

+0

Ist der eingegebene Code nicht Ihr tatsächlicher Code (oder unvollständig)? Du hast im Wesentlichen geschrieben: if self.data! = Nil {self.data = NSData()} '. Aber da "self.data" vor der Zuweisung null ist, ist die Bedingung falsch. –