2

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

//enable OR disable keys.
if(discountAmountTextField.text.isEmpty){
    keypadView.disableNotRequiredKeys()
}else{
    keypadView.enableRequiredKeys()
}

有两种方法可以将其转换为 Swift 2.0guardif 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()
}

我想知道什么被认为是一种更干净、更合适的写作方式。守卫对我来说看起来更干净,但是有什么规则可以规定我什么时候应该使用一个而不是另一个?有没有办法进一步简化方法?

4

2 回答 2

4

我会在where这里使用:

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

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

于 2015-10-01T16:33:32.763 回答
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更具可读性,但您必须缩进您的代码。

笔记

在我的假设中:

discountAmountTextField是一个实例UITextField

于 2015-10-01T16:27:10.563 回答