使用便捷初始化的MVVM在super.init调用中未初始化属性

时间:2019-01-09 21:16:30

标签: ios swift

我有一个视图模型,它继承了NSObject,因为它是我的UICollectionViewDataSource

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

我还是出错了

  

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

class ChatQuestionsViewModel: NSObject {

    fileprivate var chatService: ChatService

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

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

它似乎集中在super.init()行上。

如何初始化该课程?我不确定自己在做什么错。

1 个答案:

答案 0 :(得分:1)

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

便利的初始化方法只是为了方便。这意味着使用它们创建对象的实例一定不是不必要。但是,如果代码仅使用您的不便init,则不会初始化chatService。 (不必担心您的不便init是私人的;这无济于事。)

固定结果:

class ChatQuestionsViewModel: NSObject {
    fileprivate var chatService: ChatService

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