【问题标题】:How to run a function from switch statement in swiftui?如何在 swiftui 中从 switch 语句运行一个函数?
【发布时间】:2022-11-25 16:24:34
【问题描述】:

我试图在 swiftui 中使用 switch 语句中的参数运行一个函数,但一直收到“Type '()' cannot conform to 'View'”错误。我认为switch语句和函数应该是正确的。无论我如何处理 case 语句,我仍然会收到相同的错误消息。

struct questionsData: Codable {
    enum CodingKeys: CodingKey {
        case question
        case answers
        case correctAnswerIndex
    }
    
    //var id = UUID()
    var question: String
    var answers = [String]()
    var correctAnswerIndex: Int
}


struct ThemeView: View {
    var quizzes = [questionsData]()
    let themeName: String
    
    var body: some View {

        let themeselected: String = themeName
        var jsonfile: String = ""
        
        switch themeselected {
        case "Money Accepted":
            jsonfile = "Accounts"
            return loadQuizData(jsonname: jsonfile)
            
        case "Computers":
            jsonfile = "Computers"
            return loadQuizData(jsonname: jsonfile)
        default:
            Text("invalid")
        }
      
    }
    
    func loadQuizData(jsonname: String){
        guard let url = Bundle.main.url(forResource: jsonname, withExtension: "json")
        else {
            print("Json file not found")
            return
        }
        let data = try? Data(contentsOf: url)
        var quizzes = try? JSONDecoder().decode([questionsData].self, from: data!)
        quizzes = quizzes!
    }

}


struct ContentView: View {
    @State private var selection: String?
    
    let quizList = ["Money Accepted","Computers","Making an appointment", "Late again", "Shopping", "Renting a place", "Accounts", "Letter Writing", "Planning a business", "Business Expression 1", "Business Expression 2", "How to ask the way"]
    
    var body: some View {
    
        NavigationView{
            List(quizList, id:\.self) { quizList in
                NavigationLink(destination: ThemeView(themeName: quizList)){
                    Text(quizList)
                }
            }
            .navigationTitle("Select quiz theme")
            
        }
    }
}

请协助......对swiftui还是陌生的。 非常感激。

【问题讨论】:

  • 正文用于查看列表、文本、按钮等内容。到目前为止你的身体几乎没有尝试Apple SwiftUI Tutorials你的开关需要在每种情况下返回一个视图而不是调用返回一个空值的函数。你可以在出现时这样做。
  • 谢谢你。仍在从 UIKit 迁移的过渡中。将再次运行教程。

标签: swiftui swiftui-list


【解决方案1】:

我不明白你的 ThemeView 应该是什么样子,也许你可以给我们看一个预览。但是里面有一些错误。首先,尝试在 ViewModel 中提取该逻辑。基本上有一个单独的层来处理业务逻辑,例如 json 解析和其他东西。其次,尽量不要在视图中使用 var,除非它们被标记为 @State、@Binding、@ObservedObject...。尤其重要的是,SwiftUI 视图应该创建视图而不是处理逻辑,例如 UIKit 中的 ViewControllers,您的开关不创建视图,这就是它不符合 View 的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2021-09-06
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多