重命名默认contentView后的SwiftUI“使用未解析的标识符”

Posted

技术标签:

【中文标题】重命名默认contentView后的SwiftUI“使用未解析的标识符”【英文标题】:SwiftUI "Use of unresolved identifier" after renaming default contentView 【发布时间】:2020-06-06 17:59:51 【问题描述】:

我在 Xcode 中创建了一个新项目,并尝试将默认的 contentView 文件重命名为 LandmarkDetail

我已将 ContentView.swift 重命名为 LandmarkDetail.swift,更新了 contentView 结构的名称,并使用新的视图名称更新了“SceneDelegate.swift”。我的代码如下:

LandmarkDetail.swift:

import SwiftUI

struct LandmarkDetail: View 
    var body: some View 
        VStack 
            MapView()
                .edgesIgnoringSafeArea(.top)
                .frame(height: 300)

            CircleImage()
                .offset(y: -130)
                .padding(.bottom, -130)

            VStack(alignment: .leading) 
                Text("Turtle Rock")
                    .font(.title)
                HStack 
                    Text("Joshua Tree National Park")
                        .font(.subheadline)
                    Spacer()
                    Text("California")
                        .font(.subheadline)
                
            
            .padding()

            Spacer()
        
    


struct LandmarkDetail_Previews: PreviewProvider 
    static var previews: some View 
        LandmarkDetail()
    

SceneDelegate.swift:

import UIKit
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate 

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) 
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialised and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).

        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as? UIWindowScene 
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: LandmarkDetail())
            self.window = window
            window.makeKeyAndVisible()
        
    

...

但是,构建失败并在 SceneDelegate.swift 中出现 Use of unresolved identifier 'LandmarkDetail' 错误。我已经替换了所有出现的contentView,但我怀疑我错过了更新其他内容,因为找不到我的 LandmarkDetail 视图。

我已尝试进行干净的构建,以防某些内容被缓存。而且我找不到任何提及需要在其他地方添加导入或更改以使 LandmarkDetail 可从 SceneDelegate 类调用。

【问题讨论】:

尝试清理构建并重建 认为我最初尝试清理构建时使用了错误的键盘快捷键。嗬!无论如何,清理构建和删除 DerivedData 文件的组合使我的构建再次运行。谢谢! 【参考方案1】:

对于未来,请始终通过 cmd+单击类名来重命名类,然后单击“重命名...”。这会自动找到对该类的所有引用并为您重命名它们,这样您就不会意外错过任何一个。

但即使在这之后你是对的,如果这不起作用,清理构建并删除 derivedData 应该可以解决任何剩余的错误。

【讨论】:

以上是关于重命名默认contentView后的SwiftUI“使用未解析的标识符”的主要内容,如果未能解决你的问题,请参考以下文章

iOS/iPadOS 中的 SwiftUI + DocumentGroup:如何重命名当前打开的文档

AppDelegate 和 ContentView() 之间的 SwiftUI 通信

在 SwiftUI 开始渲染 ContentView 之前,我们如何从 Views 中独立运行一些逻辑?

ContentView (SwiftUI) 的背景图像不是子视图,但具有正确的滚动行为

SwiftUI - 从 Swift 类启动的可观察对象不会更新 ContentView() 上的 @ObservedObject

SwiftUI 检查 URL 是不是可达并自动切换到 ContentView