ios - 属性未在 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()
生产线。
我怎样才能初始化这个类?我不确定我做错了什么。
解决方案
在这种情况下,您不能使用便捷初始化程序。初始化器的规则规定您必须保证所有存储的属性都被初始化。
便利初始化器就是这样:只是为了方便。这意味着不必使用它们来创建对象的实例。但是,如果代码使用您唯一的不便init
之处,则没有chatService
. (不要介意您的不便init
是私人的;这无济于事)。
固定结果:
class ChatQuestionsViewModel: NSObject {
fileprivate var chatService: ChatService
init(chatService: ChatService = ChatService()) {
self.chatService = chatService
super.init()
}
}
推荐阅读
- amazon-web-services - 如何更改 AWS SSO 中的默认目录别名?
- sql - 如何使 SQL 请求 COUNT DISTINCT 有条件?
- java - Spring Boot如何在更新前检查数据库中的编码密码是否与表单中的密码匹配
- java - 如何获得犹太历的一年中的一周
- user-interface - Jupyter 交互式小部件未正确执行
- python - Keras -“节点”对象没有属性“输出掩码”
- python - 当前方法和类名进入日志记录;这些方法在功能上是否等效?
- python - 检查字符串是否包含数字、字母和空格
- html - th:each - 在同一列中设置所有属性?
- android - recyclerView 添加和删除