Swift 1.2到2.0的转换 - 如果让我们保护

时间:2015-10-01 16:07:23

标签: 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.0 guardif let

以下是使用if let

的代码的样子
//enable OR disable keys.
if let text = discountAmountTextField.text {
    if text.isEmpty {
        keypadView.disableNotRequiredKeys()
    } else {
        keypadView.enableRequiredKeys()
    }
} else {
    keypadView.enableRequiredKeys()
}

以下是使用保护语法

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

我想知道什么被认为是更清洁和恰当的写作方式。看门人对我来说看起来比较干净,但有什么时候我应该使用一个而不是另一个?有没有办法进一步简化方法?

2 个答案:

答案 0 :(得分:4)

我在这里使用where

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

它将两个失败案例合二为一。

答案 1 :(得分:1)

我猜你可以避免这两种情况。

您可以像这样重写代码:

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所暗示的那样,这不是使用它的最佳情况。

if let稍微更具可读性,但您必须缩进代码。

备注

在我的假设中:

discountAmountTextFieldUITextField

的一个实例