首页 > 解决方案 > 属性未在 super.init 调用中使用 MVVM 和便利 init 初始化

问题描述

我有一个视图模型NSObject,它是我的子类UICollectionViewDataSource

我想通过依赖注入将服务传递给它。

我得到一个错误虽然

属性“self.chatService”未在 super.init 调用中初始化

class ChatQuestionsViewModel: NSObject {

    fileprivate var chatService: ChatService

    convenience init(chatService: ChatService = ChatService()) {
        self.init()
        self.chatService = chatService
    }

   private override init() {
        super.init()
    }
}

它似乎专注于super.init()生产线。

我怎样才能初始化这个类?我不确定我做错了什么。

标签: iosswift

解决方案


在这种情况下,您不能使用便捷初始化程序。初始化器的规则规定您必须保证所有存储的属性都被初始化。

便利初始化器就是这样:只是为了方便。这意味着不必使用它们来创建对象的实例。但是,如果代码使用您唯一的不便init之处,则没有chatService. (不要介意您的不便init是私人的;这无济于事)。

固定结果:

class ChatQuestionsViewModel: NSObject {
    fileprivate var chatService: ChatService

    init(chatService: ChatService = ChatService()) {
        self.chatService = chatService
        super.init()
    }
}

推荐阅读