Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何修复”;“未声明类型的使用”;Swift 5.1中的错误?_Swift_Swiftui - Fatal编程技术网

“如何修复”;“未声明类型的使用”;Swift 5.1中的错误?

“如何修复”;“未声明类型的使用”;Swift 5.1中的错误?,swift,swiftui,Swift,Swiftui,我是Swift和iOS开发的新手,尝试按照官方的SwiftUI教程学习。我在第5节()中遇到了错误。我一丝不苟地遵循每一步,在完成第5节第1步之后,Xcode弹出了一个错误“使用未声明的类型‘UserData’”。我试着忽略,并坚持到底。然而,我的LandmarkList、LandmarkDetail、SceneDelegate文件警告我同样的错误。我甚至检查了从教程页面下载的项目的完整版本。除了我没有做的部分,它们看起来完全一样。这里有没有人和我有类似的经历,或者你能提供一些建议?谢谢大家!

我是Swift和iOS开发的新手,尝试按照官方的SwiftUI教程学习。我在第5节()中遇到了错误。我一丝不苟地遵循每一步,在完成第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'
    }
}

.environmentObject(UserData())
应该在
LandmarkList()
上,而您可以在
ForEach()上找到它


编辑:进一步调查这似乎不是实际问题。Landmarks应用程序在Xcode版本11.2 beta 2(11B44)上运行良好。可能您需要清理Xcode并清除派生数据文件夹,然后重新启动Xcode。

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

不需要删除派生数据文件夹或退出Xcode。只需在教程第5节第5步之后关闭项目,然后打开项目,允许它对构建进行索引,然后执行步骤6。这使project能够在内存中重建缓存。

您安装了什么版本的Xcode?非常感谢!!!!你神奇而简单的回答把我从两天来一直困扰我的难题中解救了出来!我应该在我陷入困境的那一刻问你。再一次,我想再次感谢你!我的版本是11.1(11A1027)。原来是派生数据文件夹一直在乱搞。我接受了叶甫盖尼的建议,现在它起作用了@阿米尼,我想可能是这样的。很高兴你解决了。
struct LandmarkList_Previews: PreviewProvider {
    static var previews: some View {
        LandmarkList()
            .environmentObject(UserData())
    }
}