В 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()
Есть ли где-нибудь, где мы могли бы уменьшить многословие Свифт, что я не в курсе, что выглядит более лаконично? (соответствует ближе к 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()