2016-08-09 2 views
-1

Pour passer à l'écran suivant, un patron doit avoir un des deux identifiants. Le code que je dois faire est:Expression booléenne Swift-y - case outside if/switch

let identifier1Entered = !patron.identifier1.isEmpty 
let identifier2Entered = patron.identifier2 != nil && !patron.identifier2!.isEmpty 
guard identifier1Entered || identifier2Entered else { return } 

Mais ce n'est pas Swifty, je suis force déballant l'option identifier2, parce que je ne veux pas d'étendre à un plus, et l'OMI messier

var identifier2Entered = false 
if let identifier2 = patron.identifier2 where !identifier2.isEmpty { 
    identifier2Entered = true 
} 

Ce que je pensais peut travailler est en train de prendre l'expression de la déclaration if, comme:

let id2Entered = let identifier2 = patron.identifier2 where !identifier2.isEmpty 

ou

let id2Entered = case .Some(let id2) = patron.identifier2 where !id2.isEmpty 

Mais il semble que ces expressions ne sont autorisées que dans les instructions if. L'autre solution plus Swifty je pensais est la suivante:

let identifier1Entered = !patron.identifier1.isEmpty 
guard let id2 = patron.identifier2 where !id2.isEmpty || identifier1Entered 
    else { return } 

Mais il faut que identificateur2 non nul, ce qui est incorrect, et pour autant que je sache, il n'y a aucun moyen d'utiliser en option la liaison avec || dans if ou guard déclarations. Sans parler du fait que je pense que c'est moins clair et moins lisible que le déballage forcé.

Quelqu'un at-il une solution claire, plus Swifty?

Répondre

1

Deux solutions possibles en utilisant Enchaînement en option:

let identifier2Entered = patron.identifier2?.isEmpty == false 
let identifier2Entered = !(patron.identifier2?.isEmpty ?? true) 

Si patron.identifier2 est nil alors patron.identifier2?.isEmpty Equivaut à nil, et vous obtiendrez false en conséquence.

+0

doh! Aimez la première réponse – Austin