iOS 13 的 typealias LazyVStack

kee*_*n3d 2 swift swiftui

我有一个 SwiftUI 应用程序,我想保持对 iOS 13 的支持,但在 iOS 14 上我想使用新的LazyVStackLazyHStack. 我在想typealias这会是完美的,但不确定如何正确设置,所以别名用于 iOS 13 而不是 14。我试过这个,但相信这会使别名在 iOS 13 及更高版本上可用,因此也将其包含在 iOS 14 中。

有没有办法将可用性设置为仅适用于 iOS 13?或者有没有更好的方法来做到这一点?

@available(iOS 13.0, *)
typealias LazyVStack = VStack
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 7

这是可以用作常规堆栈容器的可能包装器

struct CompatibleVStack<Content> : View where Content : View {
    let alignment: HorizontalAlignment
    let spacing: CGFloat?
    let content: () -> Content

    init(alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil,
            @ViewBuilder content: @escaping () -> Content) {
        self.alignment = alignment
        self.spacing = spacing
        self.content = content
    }

    var body: some View {
      Group {
        if #available(iOS 14, *) { // << add more platforms if needed
            LazyVStack(alignment: alignment, spacing: spacing, pinnedViews: [], content:content)
        } else {
            VStack(alignment: alignment, spacing: spacing, content:content)
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)