如何避免 Swift 中的多个 if let 语句 2
How to avoid multiple if let statements in Swift 2
我从 swift 开始,我试图让我的代码简洁。
我有一个自定义的init
方法
var title, initMainText, initBtnTitle: String?
...
init(title: String?, mainText: String?, buttonTitle: String?) {
if let t = title {
self.title = t
}
if let t = mainText {
self.initMainText = t
}
if let t = buttonTitle {
self.initBtnTitle = t
}
...
}
...
是否有更简洁的方法来展开所有这些条件?
有几种解决方法:
guard
- 多个
let
/var
在同一个if
- 具有默认值的参数
- 三元条件运算符
- 无合并运算符
- 不接受
init
中的可选参数(如 nhgrif 所建议)
看你的例子似乎
self.title
self.initMainText
self.initBtnTitle
是可选的,所以你可以简单地写:
init(title: String?, mainText: String?, buttonTitle: String?) {
self.title = title
self.initMainText = mainText
self.initBtnTitle = buttonTitle
...
}
您可以写在单个语句中,用逗号分隔 if
或 guard
。但在这种情况下,如果 title
和 mainText
应该是非零。 这是不同的逻辑,但这是在单行中定义多个条件的一种方法。如果你想要其他方式,你应该参考@vacawama answer
var title: String? = "title"
var mainText: String? = "maintest"
if let title = title, mainText = mainText {
self.initMainText = title
self.initBtnTitle = mainText
}
这与您的逻辑略有不同。如果您想在将 nil
发送到初始化程序时为属性分配默认值,那么这将是 nil 合并运算符 的好地方:
init(title: String?, mainText: String?, buttonTitle: String?) {
self.title = title ?? ""
self.initMainText = mainText ?? ""
self.initBtnTitle = buttonTitle ?? ""
...
}
现在很明显您的属性是可选的,下面的逻辑与您的相同:如果新值不是 nil
,它将更改 属性 的值:
class Foo {
var title: String? = "possible default value"
var initMainText: String? = "possible default value"
var initBtnTitle: String? = "possible default value"
init(title: String?, mainText: String?, buttonTitle: String?) {
self.title = title ?? self.title
self.initMainText = mainText ?? self.initMainText
self.initBtnTitle = buttonTitle ?? self.initBtnTitle
}
}
我从 swift 开始,我试图让我的代码简洁。
我有一个自定义的init
方法
var title, initMainText, initBtnTitle: String?
...
init(title: String?, mainText: String?, buttonTitle: String?) {
if let t = title {
self.title = t
}
if let t = mainText {
self.initMainText = t
}
if let t = buttonTitle {
self.initBtnTitle = t
}
...
}
...
是否有更简洁的方法来展开所有这些条件?
有几种解决方法:
guard
- 多个
let
/var
在同一个if
- 具有默认值的参数
- 三元条件运算符
- 无合并运算符
- 不接受
init
中的可选参数(如 nhgrif 所建议)
看你的例子似乎
self.title
self.initMainText
self.initBtnTitle
是可选的,所以你可以简单地写:
init(title: String?, mainText: String?, buttonTitle: String?) {
self.title = title
self.initMainText = mainText
self.initBtnTitle = buttonTitle
...
}
您可以写在单个语句中,用逗号分隔 if
或 guard
。但在这种情况下,如果 title
和 mainText
应该是非零。 这是不同的逻辑,但这是在单行中定义多个条件的一种方法。如果你想要其他方式,你应该参考@vacawama answer
var title: String? = "title"
var mainText: String? = "maintest"
if let title = title, mainText = mainText {
self.initMainText = title
self.initBtnTitle = mainText
}
这与您的逻辑略有不同。如果您想在将 nil
发送到初始化程序时为属性分配默认值,那么这将是 nil 合并运算符 的好地方:
init(title: String?, mainText: String?, buttonTitle: String?) {
self.title = title ?? ""
self.initMainText = mainText ?? ""
self.initBtnTitle = buttonTitle ?? ""
...
}
现在很明显您的属性是可选的,下面的逻辑与您的相同:如果新值不是 nil
,它将更改 属性 的值:
class Foo {
var title: String? = "possible default value"
var initMainText: String? = "possible default value"
var initBtnTitle: String? = "possible default value"
init(title: String?, mainText: String?, buttonTitle: String?) {
self.title = title ?? self.title
self.initMainText = mainText ?? self.initMainText
self.initBtnTitle = buttonTitle ?? self.initBtnTitle
}
}