Быстрое преобразование 1.2 в 2.0 - защита против, если позволено

Я пытаюсь преобразовать некоторый код из 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

Вот как выглядит код с 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()
}

Я хочу знать, что считается более чистым и подходящим способом написания. Охранник выглядит для меня чище, но есть ли правило, когда я должен использовать один поверх другого? Есть ли способ еще больше упростить метод?

2 ответа

Решение

Я бы использовал where Вот:

if let text = discountAmountTextField.text where 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, это не лучший вариант для его использования.

if let немного более читабельны, но вам придется отступать свой код.

Заметки

По моему предположению:

discountAmountTextField это пример UITextField

Другие вопросы по тегам