只有处理其他情况才能快速处理。使用'其中'

时间:2015-07-05 22:43:08

标签: ios swift optional

我有一个逻辑条件:

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
}

感谢您的帮助。

2 个答案:

答案 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
}