更新:我正在使用一个名为 ASCollectionView 的库,我发现用纯文本视图替换此示例中的第一个内容视图结构将允许画布按预期构建。如果我将此示例中的第二个内容视图结构替换为文本视图,画布仍然无法构建。我已经用有效的结构完全替换了失败的结构;甚至将其限制为工作结构中的两个 ASCollectionViewSection,但由于某种原因,特定结构仍会导致画布预览无法构建。我认为这可能是部分 ID 的冲突,因为我都从 0 开始,但是将第二个集合更改为使用 3 和 4 而不是重新启动为 0 和 1 并不能解决问题。我认为这两个结构之间没有区别,除了一个有三个部分,另外两个。但正如我所说,
我正在运行 Xcode 版本 12.5.1 (12E507)
我在谷歌上发现了大量的结果和各种修复,以前问过堆栈溢出问题。但是我发现的修复都没有奏效。许多是针对旧版本的 Xcode 或不是特定于 SwiftUI 的,而且我对 iOS 开发相对较新。我决定在 SwiftUI 中制作一个简单的 iOS 应用程序来试用该框架并了解更多关于 iOS 开发的知识。因此,如果这是我的一个简单错误,请原谅我,但我的项目在模拟器和真实设备上构建和运行没有问题。但是,当我尝试刷新画布时,它无法构建 ContentView.swift 并告诉我尝试分解表达式。
我的 ContentView 的主体包含一个 TabView,我已经移动了每个选项卡的内容;以及用于修改和设置视图中元素的值的 @State 变量,并将它们放入我的 ContentView 结构中它们自己的结构中。一切仍在构建和安装中,就像我将所有内容都放在 ContentView 结构的主体中时一样,但是画布仍然失败。这是 Canvas 上诊断窗口的输出。
我什至尝试评论我们的根 ContentView 正文的全部内容,并且只返回一个“Text()”视图,但问题仍然存在。
非常感谢任何人在这个问题上提供的任何时间和/或帮助,希望我能学到一两件事关于 iOS 开发;或者至少是 Xcode,当我解决这个问题时。
代码示例
struct ContentView: View {
@State private var selectedTab = 0
init() {
UITabBar.appearance().backgroundColor = UIColor(Color("color-background"))
UITabBarAppearance().backgroundColor = UIColor(Color("color-background"))
}
var body: some View {
TabView() {
OtherItemViewContent().onTapGesture {
print("tapped Primary")
self.selectedTab = 1
}.tabItem {
Label{
Text("Primary")
} icon: {
Image("primary")
.renderingMode(.template)
}
}.tag(1)
ListItemContentView().onTapGesture {
self.selectedTab = 2
}.tabItem {
Label{
Text("Secondary")
} icon: {
Image("secondary")
.renderingMode(.template)
}
}.tag(2)
.foregroundColor(Color("color-text"))
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(Data_API())
}
}
}
struct OtherItemViewContent: View {
@State private var otherItemOneList = ListItem
@State private var otherItemTwoList = ListItem
@State private var otherItemThreeList = ListItem
var body: some View {
ASCollectionView {
ASCollectionViewSection(id: 0, data: otherItemOneList, dataID: \.self) { item, _ in
HStack(alignment: .center) {
VStack(alignment: .center) {
Text("Rank")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("#\(item.id)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 30)
VStack(alignment: .center) {
Text("Name")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.itemName)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 130)
VStack(alignment: .center){
Text("Pick Ratio")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.pickRatio)%")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 150)
VStack(alignment: .center) {
Text("KD")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.kdRatio)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 40)
}
Divider()
}
.sectionHeader {
Text("Items One")
.foregroundColor(Color("color-text"))
.padding()
}
ASCollectionViewSection(id: 1, data: otherItemTwoList, dataID: \.self) { item, _ in
HStack(alignment: .center) {
VStack(alignment: .center) {
Text("Rank")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("#\(item.id)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 30)
VStack(alignment: .center) {
Text("Name")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.itemName)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 130)
VStack(alignment: .center){
Text("Pick Ratio")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.pickRatio)%")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 150)
VStack(alignment: .center) {
Text("KD")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.kdRatio)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 40)
}
Divider()
}
.sectionHeader {
Text("Items Two")
.foregroundColor(Color("color-text"))
.padding()
}
ASCollectionViewSection(id: 2, data: otherItemThreeList, dataID: \.self) { item, _ in
HStack(alignment: .center) {
VStack(alignment: .center) {
Text("Rank")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("#\(item.id)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 30)
VStack(alignment: .center) {
Text("Name")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.itemName)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 130)
VStack(alignment: .center){
Text("Pick Ratio")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.pickRatio)%")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 150)
VStack(alignment: .center) {
Text("KD")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.kdRatio)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 40)
}
Divider()
}
.sectionHeader {
Text("Items Three")
.foregroundColor(Color("color-text"))
.padding()
}
}
.layout { sectionID in
switch sectionID {
default:
return .list(
itemSize: .absolute(50),
spacing: 10,
sectionInsets: .zero,
insetSupplementaries: true,
stickyHeader: false,
stickyFooter: false)
}
}
.onAppear() {
MY_API().loadOtherItemsData { (otherItemOneList, otherItemTwoList, otherItemThreeList) in
self.otherItemOneList = otherItemOneList
self.otherItemTwoList = otherItemTwoList
self.otherItemThreeList = otherItemThreeList
}
}
}
}
struct ListItemsViewContent: View {
@State private var dataOneList = ListItem
@State private var dataTwoList = ListItem
var body: some View {
ASCollectionView {
ASCollectionViewSection(id: 3, data: dataOneList, dataID: \.self) { item, _ in
HStack(alignment: .center) {
VStack(alignment: .center) {
Text("Rank")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("#\(item.id)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 30)
VStack(alignment: .center) {
Text("Name")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.itemName)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 130)
VStack(alignment: .center){
Text("Pick Ratio")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.pickRatio)%")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 150)
VStack(alignment: .center) {
Text("KD")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.kdRatio)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 40)
}
Divider()
}
.sectionHeader {
Text("Section One")
.foregroundColor(Color("color-text"))
.padding()
}
ASCollectionViewSection(id: 4, data: dataTwoList, dataID: \.self) { item, _ in
HStack(alignment: .center) {
VStack(alignment: .center) {
Text("Rank")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("#\(item.id)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 30)
VStack(alignment: .center) {
Text("Name")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.itemName)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 130)
VStack(alignment: .center){
Text("Pick Ratio")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.pickRatio)%")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 150)
VStack(alignment: .center) {
Text("KD")
.fontWeight(.bold)
.font(.system(size: 10))
.multilineTextAlignment(.center)
Text("\(item.kdRatio)")
.font(.system(size: 12))
.multilineTextAlignment(.center)
}
.frame(width: 40)
}
Divider()
}
.sectionHeader {
Text("Section Two")
.foregroundColor(Color("color-text"))
.padding()
}
}
.layout { sectionID in
switch sectionID {
default:
return .list(
itemSize: .absolute(50),
spacing: 10,
sectionInsets: .zero,
insetSupplementaries: true,
stickyHeader: false,
stickyFooter: false)
}
}
.onAppear() {
MY_API().loadSecondItemsData { (dataOneList, dataTwoList) in
self. dataOneList = dataOneList
self. dataTwoList = dataTwoList
}
}
}
}
诊断
the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
----------------------------------------
CompileDylibError: Failed to build ContentView.swift
Compiling failed: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
/Users/<user-name>/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator/SwiftUiPracticeApp.build/Objects-normal/arm64/ContentView.2.preview-thunk.swift:150:76: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
@_dynamicReplacement(for: body) private var __preview__body: some View {
^
==================================
| BuildInvocationError
|
| /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc -F
/Applications/Xcode.app/Contents/SharedFrameworks-iphonesimulator -enforce-exclusivity=checked -DDEBUG
-sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
/iPhoneSimulator14.5.sdk -target arm64-apple-ios14.0-simulator -module-cache-path /Users/<user-name>
/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -Xfrontend -serialize-debugging-options
-enable-testing -swift-version 5 -I /Users/<user-name>/Library/Developer/Xcode/DerivedData
/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex/Previews
/SwiftUiPracticeApp/Products/Debug-iphonesimulator -F /Users/<user-name>/Library/Developer/Xcode
/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex/Previews
/SwiftUiPracticeApp/Products/Debug-iphonesimulator -c -j8 -serialize-diagnostics
-Xcc -I/Users/<user-name>/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze
/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator
/SwiftUiPracticeApp.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/<user-name>/Library
/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build
/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator/SwiftUiPracticeApp.build
/SwiftUiPracticeApp-generated-files.hmap -Xcc -I/Users/<user-name>/Library/Developer/Xcode
/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex
/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator
/SwiftUiPracticeApp.build/SwiftUiPracticeApp-own-target-headers.hmap -Xcc -I/Users/<user-name>
/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build
/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build
/Debug-iphonesimulator/SwiftUiPracticeApp.build/SwiftUiPracticeApp-all-non-framework-target-headers.hmap
-Xcc -ivfsoverlay -Xcc /Users/<user-name>/Library/Developer/Xcode
/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex
/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator
/SwiftUiPracticeApp.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/<user-name>
/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze
/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build
/Debug-iphonesimulator/SwiftUiPracticeApp.build/SwiftUiPracticeApp-project-headers.hmap -Xcc
-I/Users/<user-name>/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze
/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Products/Debug-iphonesimulator/include
-Xcc -I. -Xcc -ISwiftUiPracticeApp -Xcc -ISwiftUiPracticeAppTests -Xcc -ISwiftUiPracticeAppUITests
-Xcc "-ISwiftUiPracticeApp/Preview Content" -Xcc -I/Users/<user-name>/Library
/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze
/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build
/Debug-iphonesimulator/SwiftUiPracticeApp.build/DerivedSources-normal/arm64 -Xcc -I
/Users/<user-name>/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze
/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build
/Debug-iphonesimulator/SwiftUiPracticeApp.build/DerivedSources/arm64 -Xcc -I/Users/<user-name>
/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex
/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator
/SwiftUiPracticeApp.build/DerivedSources -Xcc -DDEBUG=1 -working-directory /Users
/<user-name>/XcodeProjects/SwiftUiPracticeApp /Users/<user-name>/Library/Developer/Xcode/DerivedData
/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze/Build/Intermediates.noindex/Previews
/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build/Debug-iphonesimulator
/SwiftUiPracticeApp.build/Objects-normal/arm64/ContentView.2.preview-thunk.swift -o /Users
/<user-name>/Library/Developer/Xcode/DerivedData/SwiftUiPracticeApp-gagrbujnkjvcthadtkeswjidloze
/Build/Intermediates.noindex/Previews/SwiftUiPracticeApp/Intermediates.noindex/SwiftUiPracticeApp.build
/Debug-iphonesimulator/SwiftUiPracticeApp.build/Objects-normal/arm64
/ContentView.2.preview-thunk.o -module-name SwiftUiPracticeApp_PreviewReplacement_ContentView_2
-Onone -Xfrontend -disable-modules-validate-system-headers