SwiftUI : Error while using if#available while trying to build to iOS 13 and iOS 14 in Xcode 12 beta 2

标签 swift xcode ios13

所以我正在努力使我的应用程序可以部署在 iOS 13(从技术上讲我想要 iOS 13.5)以及 iOS 14 上,所以我编写了这些代码行来测试它:

struct ContentView: View {
    var body: some View {
        if #available(iOS 14.0, *) {
            List {
                Text("Cool!")
                Text("Cool!")
                Text("Cool!")
                Text("Cool!")
            }
            .listStyle(InsetGroupedListStyle())
            
        } else {
            List {
                Text("Cool!")
                Text("Cool!")
                Text("Cool!")
                Text("Cool!")
            }
            .listStyle(GroupedListStyle())
            .environment(\.horizontalSizeClass, .regular)
        }
    }
}
构建到 iOS 14 效果很好,但是,每当我在物理手机和模拟器上构建到 iOS 13.5 时,我都会在 AppDelegate 中收到此错误:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
我已经确保将我的 iOS 部署目标设置为 iOS 13.5 并且我使用的是 Xcode 12 beta 2。我尝试使用 beta 1 并得到相同的结果(尽管我使用了相同的文件,所以可能这就是原因?)。我不确定我是否做错了什么,或者这是否是一个错误。当单独使用 iOS 13.5 的代码(没有 if#available)时,它按预期工作,但只有当我添加该检查器时才会出现问题。任何帮助,将不胜感激!

最佳答案

不幸的是,我可以在 Xcode 12 beta 4 中重现这个错误,所以这里有一个解决方法。您可以将 iOS 14 代码包装成 AnyView并且都将成功编译。在这种特殊情况下,您可以使用 ViewModifier使代码看起来更快捷。

struct ContentView: View {
    var body: some View {
        List {
            Text("Cool!")
            Text("Cool!")
        }
        .modifier(GroupedListModifier())
    }
}

struct GroupedListModifier: ViewModifier {
    func body(content: Content) -> some View {
        Group {
            if #available(iOS 14, *) {
                AnyView(
                    content
                        .listStyle(InsetGroupedListStyle())
                )
            } else {
                content
                    .listStyle(GroupedListStyle())
                    .environment(\.horizontalSizeClass, .regular)
            }
        }
    }
}

关于SwiftUI : Error while using if#available while trying to build to iOS 13 and iOS 14 in Xcode 12 beta 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62838350/

相关文章:

ios - 如何知道在 iOS 中何时完成并行 HTTP 请求?

ios - 如何精确检测何时触摸 SKShapeNode?

c - 列出具有特定 ID 的串行 USB 设备

ios13通知内容自定义高度

swift - 在 Swift 中打乱字符串中的字符

ios - 键盘打开时移动 View 的问题

xcode - 在 Xcode 中使用 OpenGL 进行深度分析

ios - 使用C++文件iOS项目时如何将std::vector<uchar>转换为NSData

ios - iOS 13 和 iPhone 11 Pro 模拟器下的 tableView.rowHeight = UITableView.automaticDimension 导致无限更新 subview 循环

iOS 13后台下载问题