swift - 我们可以避免像在 Kotlin 中那样进一步减少 Swift 的冗长吗?
问题描述
在 Kotlin 中,我们可以创建一个作用域函数,如下所示。
inline fun <R> run(block: () -> R): R {
return block()
}
我们可以如下使用它来选择要显示的视图。
run {
if (choice) viewOne else viewTwo
}?.show()
在 Swift 中,我们也可以声明如下
@inline(__always) func run<R>(block: () -> R) -> R {
return block()
}
但是,当我们使用它时,它必须非常详细,如下所示。
run { () -> View? in // Need to explicitly show `View is return
if choice {
return viewOne // Need to explicitly return
} else {
return viewTwo // Need to explicitly return
}
}?.show()
有没有什么地方可以减少我不知道的 Swift 的冗长,让它看起来更简洁?(匹配更接近 Kotlin)
更新
显示整个代码
@inline(__always) func run<R>(block: () -> R) -> R {
return block()
}
class View {
func show() {print("A")}
}
let viewOne: View = View()
let viewTwo: View = View()
var choice = true
run { () -> View in
return choice ? viewOne : viewTwo
}.show()
解决方案
问题是编译器无法推断多行闭包的返回类型。但是,您可以使用三元运算符而不是if-else
. 这样您就可以摆脱return
语句和类型注释。
run { choice ? viewOne : viewTwo }.show()
推荐阅读
- python - PyQt5 Qtablewidget 和连接按钮
- c# - 使用 CefSharp v65 加载本地 html/css/js 文件
- javascript - 加载窗口后如何更改href值
- java - 没有功能java的自定义按钮类
- android - 比较 Fabric App Distribution 和 Google Play Store 测试渠道?
- spring-boot - 在 Actuator Endpoint 中定义 Spring Cloud Stream Binding 的名称
- php - 浏览器下载 application/x-httpd-php 而不是显示索引页面
- c# - 在 TFS GetChangesForChangeset 中返回项目中的其他文件而不是查询的文件
- javascript - 对滑动内容应用过渡效果
- html - 结合使用 Eval() 并检查值的存在