Ios Swift 1.2到2.0转换-防护与出租

Ios Swift 1.2到2.0转换-防护与出租,ios,swift2,guard-statement,Ios,Swift2,Guard Statement,我正在尝试将一些代码从Swift 1.2转换为2.0。我在Swift 1.2中有以下代码 //enable OR disable keys. if(discountAmountTextField.text.isEmpty){ keypadView.disableNotRequiredKeys() }else{ keypadView.enableRequiredKeys() } 有两种方法可以将其转换为Swift 2.0guard和if let //enable OR disab

我正在尝试将一些代码从Swift 1.2转换为2.0。我在Swift 1.2中有以下代码

//enable OR disable keys.
if(discountAmountTextField.text.isEmpty){
    keypadView.disableNotRequiredKeys()
}else{
    keypadView.enableRequiredKeys()
}
有两种方法可以将其转换为Swift 2.0
guard
if let

//enable OR disable keys.
if let text = discountAmountTextField.text {
    if text.isEmpty {
        keypadView.disableNotRequiredKeys()
    } else {
        keypadView.enableRequiredKeys()
    }
} else {
    keypadView.enableRequiredKeys()
}
下面是使用
if let

//enable OR disable keys.
if let text = discountAmountTextField.text {
    if text.isEmpty {
        keypadView.disableNotRequiredKeys()
    } else {
        keypadView.enableRequiredKeys()
    }
} else {
    keypadView.enableRequiredKeys()
}
下面是使用guard语法的情况

//enable OR disable keys.
guard let text = discountAmountTextField.text else {
    keypadView.enableRequiredKeys()
    return;
}
if text.isEmpty {
    keypadView.disableNotRequiredKeys()
} else {
    keypadView.enableRequiredKeys()
}

我想知道什么是一种更干净、更合适的写作方式。在我看来,警卫看起来更干净,但有没有一条规则规定我应该在什么时候使用一个而不是另一个?有没有办法进一步简化这个方法呢?

我想你可以避免这两种情况

您可以像这样重写代码:

switch discountAmountTextField.text?.isEmpty {
  case .Some(let value) where value:
      keypadView.disableNotRequiredKeys()
  case .Some(let value) where !value:
      keypadView.enableRequiredKeys()
  case _ :
      keypadView.enableRequiredKeys()
}
紧凑,而且仍然可读

就可读性而言,
guard
语句在我看来并不是最好的

此外,正如@gnasher729所指出的,这并不是使用它的最佳情况

如果让
更具可读性,则必须缩进代码

注释

在我看来:


discountAmountTextField
UITextField

的一个实例,我会在这里使用
,其中

if let text = discountAmountTextField.text where text.isEmpty {
    keypadView.disableNotRequiredKeys()
} else {
    keypadView.enableRequiredKeys()
}

它将您的两个失败案例合并为一个。

使用“如果让…在哪里…”。这里有一个很好的答案:“守卫”是用来观察通常不应该发生的情况并处理它们的。所以这里看起来很不合适。@gnasher729是对的。类似于
的内容将其更改为
//启用或禁用键。如果let text=discountAmountTextField.text where text.isEmpty{keypadView.disableNotRequiredKeys()}否则{keypadView.enableRequiredKeys()}
谢谢!