swift - 如何修复 Swift 5.1 中的 "Use of undeclared type"错误?

标签 swift swiftui

我是 Swift 和 iOS 开发的新手,尝试按照官方 SwiftUI 教程学习。我在第 5 节 ( https://developer.apple.com/tutorials/swiftui/handling-user-input ) 中遇到错误。我一丝不苟地执行了每一步,在完成第 5 节第 1 步之后,Xcode 弹出错误“使用未声明的类型‘UserData’”。我试图忽略并跟进。但是,我的 LandmarkList、LandmarkDetail、SceneDelegate 文件警告我同样的错误。我什至检查了我从教程页面下载的项目的完整版本。除了我没有做的部分,它们看起来完全一样。这里有没有人和我有类似的经历,或者你能提供一些建议吗?谢谢!

我正在使用 Xcode 11 和 Swift 5。

这是我在 Models 文件夹下创建的 UserData 类。

import Combine
import SwiftUI

final class UserData: ObservableObject {
    @Published var showFavoritesOnly = false
    @Published var landmarks = landmarkData
}

这是一直提示错误的rootview文件。

import SwiftUI

struct LandmarkList: View {
    @EnvironmentObject private var userData: UserData  // Use of undeclared type 'UserData'

    var body: some View {
        NavigationView {
            List { // Unable to infer complex closure return type; add explicit type to disambiguate
                Toggle(isOn: $userData.showFavoritesOnly){ // Use of unresolved identifier '$userData'
                    Text("Favorites Only")
                }

                ForEach(userData.landmarks) { landmark in
                    if !self.userData.showFavoritesOnly || landmark.isFavorite {
                        NavigationLink(destination: LandmarkDetail(landmark: landmark)
                            .environmentObject(self.userData)) {
                            LandmarkRow(landmark: landmark)
                        }
                    }
                }
            }
            .navigationBarTitle(Text("Landmarks"))
        }
    }
}

struct LandmarkList_Previews: PreviewProvider {
    static var previews: some View {
        ForEach(["iPhone SE", "iPhone XS Max"], id: \.self) { deviceName in
            LandmarkList()
                .previewDevice(PreviewDevice(rawValue: deviceName))
                .previewDisplayName(deviceName)
        }
        .environmentObject(UserData()) // Use of unresolved identifier 'UserData'
    }
}

最佳答案

您需要清理并关闭 Xcode,然后删除派生数据,然后重新打开 Xcode。我在做苹果教程时一直遇到这个问题。

关于swift - 如何修复 Swift 5.1 中的 "Use of undeclared type"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552287/

相关文章:

swift - 获取用于启动 OS X 应用程序的初始 URL

Xcode 12.3 在启动 SwiftUI 项目时卡住

ios - 在其他 View 中更新核心数据属性时,SwiftUI 列表不会更新

ios - widgetURL 在 Foreach 内被覆盖?

swift - 函数调用后对象发生变化

iOS - 不同 Storyboard中的容器组件

ios - 使用 Swift 3,如何解析 JSON 文件以便可以全局访问数据?

ios - UITableView - 在 vi​​ewDidAppear 之前滚动到底部

xcode - 将 ObservedObject 传递给嵌套 subview SwiftUI(SwiftUI 数据流)

ios - 在 SwiftUI 中呈现 NavigationLink 时过渡动画消失了