2016-08-09 40 views
-1

zum nächsten Bildschirm weiter ein patron muß eines von zwei Identifikatoren aufweisen. Der Code, den ich habe, dies zu tun ist:Swift-y Booleschen Ausdruck - Fall außerhalb if/Schalter

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

Aber es ist nicht Swifty, ich bin Kraft-Abwickeln der optionalen identifier2, weil ich nicht will diesen Messier zu einem längeren und IMO erweitern

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

Was ich dachte funktionieren könnte nimmt nur den Ausdruck aus der if Aussage wie:

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

oder

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

Es scheint aber, dass diese Ausdrücke nur innerhalb von if Anweisungen erlaubt sind. Die andere mehr Swifty Lösung dachte ich an, ist dies:

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

Aber es erfordert, dass Bezeichner2 nicht gleich Null ist, was falsch ist, und soweit ich weiß, gibt es keine Möglichkeit, optional zu verwenden, mit || in if Bindung oder guard Aussagen. Ganz zu schweigen davon, dass ich denke, dass es weniger klar und lesbar ist als das Auspacken.

Wer hat eine klare, mehr Swifty Lösung?

Antwort

1

Zwei mögliche Lösungen optional Verkettung mit:

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

Wenn patron.identifier2nil dann ist patron.identifier2?.isEmpty ausgewertet nil, und Sie werden false als Ergebnis erhalten.

+0

doh! Liebe die erste Antwort – Austin