我有一个逻辑条件:
if let login = login where validateLogin(login) {
// I'm not interesting with this condition
} else {
// This is interesting
}
如果让条件不处理真实条件(因为我不想对此做任何事情),有什么选择可以写某种方式吗?所以,就像否定一样:
!(if let login = login where validateLogin(login)) {
// This is interesting
}
感谢您的帮助。
答案 0 :(得分:7)
在Swift 1.2中,这样的事情是不可能的,但你可以使用:
// since where is logically the same as &&
if !(login != nil && validateLogin(login!)) {
// This is interesting
}
// or
if login == nil || !validateLogin(login!) {
// This is interesting
}
在逻辑上与您期望的实现相同。注意:因为&&
和||
运算符都将表达式的右侧包装在闭包中,所以强制展开甚至是#34;安全"。
期待Swift 2,我们得到一个新的guard
语句,它首先处理else部分:
guard let login = login where validateLogin(login) else {
// This is interesting
}
// use the unwrapped login here if you want
答案 1 :(得分:5)
if条件中的第一个分支实际上由2个条件组成:
if let
是对非空where
是后续条件的语法糖,当你可以确定变量不为空时。您可以像这样颠倒逻辑:
if login == nil || !validateLogin(login!) {
// do something
}