如何解决如何通过typealias在SwiftUI中有条件地使用更新的View类型?
在SwiftUI中,我经常想使用一个新的类(例如LazyVStack
),其代码如下:
var body: some View {
NavigationView {
ScrollView {
LazyVStack {
ForEach(items) { item in
HStack {
Text(item.name)
Image("...")
VStack {
item.foo
item.bar
}
}
}
}
}
}
}
但是,由于我的目标操作系统是14.0以下的操作系统,因此我得到警告:
“ LazyVStack”仅在iOS 14.0或更高版本中可用。
我想使代码保持完整(而不是重构/复制代码),同时在必要时允许其回退到VStack
。
似乎最优雅的解决方案是将Compiler Control Statements(例如#if
)与Availability Condition(例如@available
)和typealias
结合起来:
#if @available(ios 14.0,*)
typealias MyVStack = LazyVStack
#else
typealias MyVStack = VStack
#endif
此时调用代码看起来几乎相同,并且将变为:
var body: some View {
NavigationView {
ScrollView {
MyVStack {
ForEach(items) { item in
HStack {
Text(item.name)
Image("...")
VStack {
item.foo
item.bar
}
}
}
}
}
}
}
但是,我想不出一种将Complier Control语句与可用性条件结合起来的方法。我得到:
一行上的连续语句必须用';'
分隔
有什么办法可以做功能上等同于#if @available
的事情,或者是一种行为几乎与之相同的解决方法? (即,仍将我所有的视图构建代码保留在body
方法中,而不在其中引入额外的if
语句。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。