我想创建一个父视图模型,其中包含一些我希望我的所有视图模型在SwiftUI中都拥有的基本内容.我正在try 使父视图模型具有泛型变量,这样我就可以在使用自定义类型创建的任何视图模型中继承ParentViewModel.

这就是我试过的方法,在loaded个 case 中得到了Cannot find type 'T' in scope个错误.我真的不确定我如何才能让它变得通用,这里有什么见解吗?

class ParentViewModel: ObservableObject {
    enum Status {
        case loading
        case loaded(T)
        case error(Error)
    }
    
    @Published var status: Status = .loading
}

class ChildViewModel: ParentViewModel {
    
    init() {
        self.status = .loading
    }
    
    init(object: SomeObject) {
        self.status = .loaded(object)
    }
}

推荐答案

当您使用泛型时,必须在<>中声明它,这在您的示例中是缺失的.

以下是一个有效的修改版本:

class SomeObject { }

class ParentViewModel<T>: ObservableObject { // Declare T
    enum Status {
        case loading
        case loaded(T)
        case error(Error)
    }
    
    @Published var status: Status = .loading
}

class ChildViewModel: ParentViewModel<SomeObject> { // Specify that ParentViewModel will use SomeObject as T
    
    override init() {
        self.status = .loading
    }
    
    init(object: SomeObject) {
        self.status = .loaded(object)
    }
}

Swift相关问答推荐

是否有一个Kotlin等价的Swift s @ AddendableReport注释'

如何使用swift宏生成一个带有关联值的枚举?

SWIFT闭包使用的是陈旧的值,即使它是S@转义

如何使用变量 Select 哪个向量(?)在我的 struct 中密谋吗?

如何在应用程序区域永久更改 NSCursor?

SwiftUI 中的同一个 ForEach 中是否可以有 2 个数组?

DispatchQueue.main.asyncAfter 等同于 Swift 中的 struct 化并发?

如何制作一个在 SceneKit 中投射阴影的透明物体?

在 init(from decoder: Decoder) 方法中访问原始 JSON 数据

swiftui中服务端图片如何设计view并赋予rotationEffect?

使用 RxSwift 围绕 async/await 方法创建 Observable

XCUITest 在 TearDown 期间随机失败-无法终止 com.bundle.id

用户输入以更改通过点击生成的形状大小

(SwiftLint)如果有正文,如何编写规则(可能是自定义),在{之后总是\n(换行)?

使用 Date.ParseStrategy 将字符串解析为日期

在 Swift 中从 HTML 生成带有图像的 PDF 而不显示打印界面

如何从 Button 获取标签名称?

为什么我可以转换为 NSManagedObject 但不能转换为我的实体类型?

UITableViewCell 不显示 detailTextLabel.text - Swift

在情节提要中设置的 UITableViewCell 的恢复 ID 和标识符有什么区别