小编Che*_*rK2的帖子

捕获 SwiftUI 中的错误

我在某些视图中有一个按钮,它调用 ViewModel 中可能引发错误的函数。

Button(action: {
    do {
        try self.taskViewModel.createInstance(name: self.name)
    } catch DatabaseError.CanNotBeScheduled {
        Alert(title: Text("Can't be scheduled"), message: Text("Try changing the name"), dismissButton: .default(Text("OK")))
    }
}) {
    Text("Save")
}
Run Code Online (Sandbox Code Playgroud)

try-catch 块产生以下错误:

Invalid conversion from throwing function of type '() throws -> Void' to non-throwing function type '() -> Void'
Run Code Online (Sandbox Code Playgroud)

这是 viewModel 中的 createInstance 函数,taskModel 函数以同样的方式处理错误。

func createIntance(name: String) throws {
    do {
        try taskModel.createInstance(name: name)
    } catch {
        throw DatabaseError.CanNotBeScheduled
    }
}   
Run Code Online (Sandbox Code Playgroud)

如何正确捕获 SwiftUI 中的错误?

try-catch throw ios swiftui

10
推荐指数
1
解决办法
7707
查看次数

将 MVC 等设计模式与 SwiftUI 结合使用

我正在尝试实现像MVC这样的设计模式,以实现代码不同部分之间的低耦合。我个人认为网上很少有关于 IOS 或 swift UI 开发和 MVC 模式的资料没有帮助。

我想了解的是控制器类应该如何控制或呈现 Swift UI 中的 UI?

例如,遵循 MVC 模式 - 视图不应该知道模型的外观,因此将对象从数据库发送回视图以直观地呈现它不是一个好主意。

假设我们有以下视图和控制器,当从数据库发送回数据时,我应该如何进行控制器和视图之间的交互,以便将其直观地呈现在视图中?

看法:

import SwiftUI
import Foundation

struct SwiftUIView: View {

    
    var assignmentController = AssignmentController()
    

    @State var assignmentName : String = ""
    @State var notes : String = ""
  

  
    var body: some View {
        
        NavigationView {
            VStack {
                Form {
                   
                        
                        TextField("Assignment Name", text: $assignmentName)

    
                        TextField("Notes", text: $notes)
                
     
            }
                
                Button(action: {
                                                               
                    self.assignmentController.retrieveFirstAssignment()
                                       }) {
                                                                                                                                                Text("Get The First Assignment !")
                                                                                    }

            }
            .navigationBarTitle("First Assignment")
        } …
Run Code Online (Sandbox Code Playgroud)

model-view-controller design-patterns ios swift swiftui

5
推荐指数
2
解决办法
4324
查看次数