2017-07-25 4 views
1

Selon l'en-tête Swift pour StringPourquoi le compilateur me dire que je dois déballer un Bool (? Non en option)

la propriété isEmpty est un Bool (pas un droit en option?)

public var isEmpty: Bool { get } 

mais dans mon code, lorsque je tente d'écrire:

!sender.titleOfSelectedItem?.isEmpty 

Valeur de type en option Bool? non déballé, vouliez-vous utiliser "?" ou "!"

Pourquoi le compilateur pense-t-il que isEmpty est une option?

Est-ce parce que l'objet qui contient la propriété est actuellement facultatif?

titleOfSelectedItem est un String?

ou suis-je manque juste tout à fait quelque chose, ici?

Répondre

4

sender.titleOfSelectedItem?.isEmpty est une option chaîne et a le type Bool? car il peut revenir nil si titleOfSelectedItem est nil.

Vous devez décider comment vous voulez gérer le boîtier nil. Vous pouvez combiner la chaîne en option avec l'opérateur coalescent nul?? à déballer en toute sécurité le résultat:

// treat nil as empty 
let empty = sender.titleOfSelectedItem?.isEmpty ?? true 

ou vous pouvez comparer la valeur à false:

if sender.titleOfSelectedItem?.isEmpty == false { 
    // value isn't nil and it isn't empty 
} 

ou vous pouvez comparer à valeur à true:

if sender.titleOfSelectedItem?.isEmpty == true { 
    // value isn't nil and it is an empty String 
} 
+0

ty d'un optionnel devient un optionnel quand il est chaîné? Je suppose que j'ai juste supposé que la liaison optionnelle éclaterait quand le récepteur (facultatif) serait nul, et ne vérifierait pas les propriétés de la chaîne –

+0

La propriété ne devient pas optionnelle. Le résultat de la chaîne optionnelle est facultatif. Si un lien dans la chaîne est 'nil', la chaîne se casse et retourne' nil'. Comme la chaîne peut avoir un résultat nul, le type du résultat doit être optionnel car seul un optionnel peut être 'nil'. C'est * chaînage optionnel *. La liaison facultative est 'si let variable = expression optionnelle'. Vous pouvez combiner les deux car l'expression * optionnelle * peut être une * chaîne optionnelle *. – vacawama

+0

ah ok, totalement l'obtenir maintenant, était confus de la chaîne optionnelle et liaison facultative. Merci pour l'explication! –