2016-11-09 3 views
1

I erstellt einen Typ alias:Ist die count-Eigenschaft von Array optional?

typealias areasOfStudyType = Array<Dictionary<String, String>> 

Dann wird eine erstellt eine optionale variable:

var areasOfStudy : areasOfStudyType? = nil 

ich brauche die Anzahl der Elemente des Arrays zu verwenden, um sie in einer Tabellenansicht setzen so typisiert I :

areasOfAStudy?.count 

ich verstehe, dass, wenn areasOfStudynil ist diese Codezeile versucht nicht den Wert der Zählung zu bekommen, weil ich m mit optionaler Verkettung. Aber wenn es nicht nil ist, wird es eine Int zurückgeben.

Allerdings wirft der Compiler, dass ich nicht eine optionale auszupacken und schlägt vor, dass ich ein:

(areasOfAStudy?.count)! 

Warum ist areasOfAStudy?.count ein optionales? Wenn ich an den Array-Dokumentation Referenz aussehen las ich:

Zählung
Die Anzahl der Elemente der Array speichert.

Erklärung
var Zahl: Int {get}

+4

Optional Verkettung gibt eine optionale ... –

+0

Großartig! Sie haben auf das richtige Problem hingewiesen. Das Swift-Programmiersprachenbuch lautet: – Azul

+0

"Um die Tatsache widerzuspiegeln, dass optionale Verkettung für einen Nullwert aufgerufen werden kann, ist das Ergebnis eines optionalen Verkettungsaufrufs immer ein optionaler Wert, selbst wenn die von Ihnen abgefragte Eigenschaft, Methode oder der Index zurückkommt ein nicht optionaler Wert " Auszug aus: Apple Inc." Die Swift-Programmiersprache (Swift 3). "iBooks. https://itun.es/ca/jEUH0.l – Azul

Antwort

1

Der Graf ist nicht optional, aber das Array ist. Daher ist die Angabe von areasOfAStudy? .count optional, da, wenn areasOfAStudy eine NULL-Zahl ist, nie aufgerufen wird, so dass sie auf null bewertet wird.

var areasOfAStudy: [String]? = nil 
//This evaluates to nil because areasOfAStudy is nil. The type of a is Int? 
var a = areasOfAStudy?.count 
print(type(of:a)) 
+0

Dies beantwortet meine Frage auch. Vielen Dank! – Azul

1

So funktioniert optionale Verkettung.

Wenn Sie let value = nonOptional.property haben, property und nonOptional Annahme ist nicht optional, dann value nicht optional sein.

Wenn Sie jedoch tun let value = optionalObject?.property obwohl property nicht als optional definiert ist, können Sie es durch optionale Verkettungs zugegriffen wird (das ist, was die ?. Mittel) so, weil optionalObject optional ist, dann value auch optional ist, weil optionalObjectnil sein könnte .

Verwandte Themen