Быстрое преобразование 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