Xcode RealityKit / Не удалось выполнить диагностику для выражения

#xcode #arkit #realitykit

#xcode #arkit #realitykit

Вопрос:

Я пытаюсь создать приложение дополненной реальности с помощью RealityKit, но contentView.swift У меня возникли некоторые проблемы, чего здесь не хватает?` Вы можете увидеть ошибки на картинке, которой я поделился. Я следовал некоторому руководству, поэтому я новичок в Xcode и Realitykit.

 Failed to produce diagnostic for expression; please file a bug report
Cannot find 'PlacementButtonsView' in scope
  

РИС. ОШИБКИ.

 import SwiftUI
import RealityKit

struct ContentView : View {
    var models: [String] = {
        
        let filemanager = FileManager.default
        
        guard let path = Bundle.main.resourcePath, let files = try?
            filemanager.contentsOfDirectory(atPath:path) else
                { return[]
            }
        var avaliableModels: [String] = []
        for filename in files where filename.hasSuffix("usdz") {
            let modelName = filename.replacingOccurrences(of: ".usdz", with: "")
            avaliableModels.append(modelName)
        }
        
        return avaliableModels
    }()
    
    var body: some View {
        ZStack(alignment: .bottom) {
            ARViewContainer()
            
            ModelPickerView(models: self.models)
            
            PlacementButtonsView()
        }
    }
}

struct ARViewContainer: UIViewRepresentable {
    
    func makeUIView(context: Context) -> ARView {
        
        let arView = ARView(frame: .zero)
        
        return arView
        
    }
    
    func updateUIView(_ uiView: ARView, context: Context) {}
    
}

struct ModelPickerView: View {
    var models: [String]
    
    var body: some View {
        ScrollView(.horizontal, showsIndicators: false) {
            HStack(spacing: 20) {
                ForEach(0 ..<
                    self.models.count) { index in
                    Button(action: {
                        print("DEBUG: selected model with name: (self.models[index])")
                    }) {
                        Image(uiImage: UIImage(named: self.models[index])!)
                            .resizable()
                            .frame(height: 60)
                            .aspectRatio(1/1,contentMode: .fit)
                            .background(Color.white)
                            .cornerRadius(12)

                         }
                             .buttonStyle (PlainButtonStyle())
                    
                      }
             }
       }
        .padding(15)
        .background(Color.black.opacity(0.5))
}

struct PlacementButtonsView: View {
    var body: some View {
        HStack {
            //Cancel Button
            Button(action: {
                print("DEBUG: model placement canceled.")
            }) {
                Image(systemName: "xmark")
                .frame(width: 60, height: 60)
                .font(.title)
                .background(Color.white.opacity(0.75))
                .cornerRadius(30)
                .padding(20)
                
            }
            
            //Confirm Button
            Button(action: {
                print("DEBUG: model placement confirmed.")
            }) {
                Image(systemName: "checkmark")
                .frame(width: 60, height: 60)
                .font(.title)
                .background(Color.white.opacity(0.65))
                .cornerRadius(30)
                .padding(20)
                
            }
        }
    }
}
    
#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

    
}
  

Ответ №1:

Проверьте свои фигурные скобки. PlacementButtonsView Структура фактически вложена в ModelPickerView структуру и недоступна глобально, поэтому она недоступна из вашего ContentView .

Кстати, в Xcode вы можете узнать об этом, нажав на объявление PlacementButtonsView :

Быстрая справка для PlacementButtonsView

ModelPickerView.PlacementButtonsView показывает, что здесь пошло не так; PlacementButtonsView вложен внутри ModelPickerView . Вот почему у вас, похоже, странная закрывающая скобка в последней строке вашего примера кода — та же проблема возникает с предварительным просмотром, поскольку он также вложен ModelPickerView .

Чтобы сделать эту проблему более заметной и легче увидеть подобные проблемы в будущем, вы также можете попросить Xcode сделать отступ для вашего кода, выбрав все (Cmd A), а затем нажав Control I. Вы увидите PlacementButtonsView отступ структуры, что делает более понятным, что он недоступен глобально.