Swift 1.2 到 2.0 转换 - guard vs if let
Swift 1.2 to 2.0 conversion - guard vs if let
我正在尝试将一些代码从 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()
}
这是使用保护语法的样子
//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 所建议的,这不是使用它的最佳情况。
if let
可读性稍强,但您必须缩进代码。
备注
在我的假设中:
discountAmountTextField
是 UITextField
的实例
我会在这里使用 where
:
if let text = discountAmountTextField.text where text.isEmpty {
keypadView.disableNotRequiredKeys()
} else {
keypadView.enableRequiredKeys()
}
它将您的两个失败案例合并为一个。
我正在尝试将一些代码从 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()
}
这是使用保护语法的样子
//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 所建议的,这不是使用它的最佳情况。
if let
可读性稍强,但您必须缩进代码。
备注
在我的假设中:
discountAmountTextField
是 UITextField
我会在这里使用 where
:
if let text = discountAmountTextField.text where text.isEmpty {
keypadView.disableNotRequiredKeys()
} else {
keypadView.enableRequiredKeys()
}
它将您的两个失败案例合并为一个。