我来自 Objc 背景和 swift 新手。
这个注释是什么意思“///以静态方式使用”
/// Used in a static manner
struct RecentItemsController {
fileprivate init() { }
}
我真的需要这个 init() 吗?
在整个代码库中我没有写RecentItemsController(),那为什么需要这个构造函数定义呢?
我来自 Objc 背景和 swift 新手。
这个注释是什么意思“///以静态方式使用”
/// Used in a static manner
struct RecentItemsController {
fileprivate init() { }
}
我真的需要这个 init() 吗?
在整个代码库中我没有写RecentItemsController(),那为什么需要这个构造函数定义呢?
fileprivate 保证您不能从此类实例化新对象。所以这是不可能的:
let recentItemsController = RecentItemsController()
注意:'()'。
我认为它打算用作单例。
这就是使它成为静态的原因,这就是为什么您从未编写或找到此类的新实例的原因。
你应该在你的类中拥有这个静态类的共享实例RecentItemsController
:
static let sharedRecentItemsController = RecentItemsController()
并在需要的任何地方使用该实例,如下所示:
let recentItemsController = RecentItemsController.sharedRecentItemsController
这保证了您在代码中的任何地方都使用相同的对象(因此是静态的)。
额外信息:
fileprivate
几乎与常规属性相同,常规private
属性包含在该类中,但使其可用于扩展。
还可以在这个不错的博客文章中阅读更多关于静态和单例类的信息
编辑
我想我会添加这个:也可能是 init 设置为 private 以绝对保证不能为结构创建新实例,因为结构提供了一个成员初始化器:
如果结构类型没有定义任何自己的自定义初始值设定项,则结构类型会自动接收成员初始值设定项。与默认初始值设定项不同,结构接收成员初始值设定项,即使它存储了没有默认值的属性。- Apple Developer,部分:结构类型的成员初始化器
因此,如果您实际上将其用作 Singleton,则使用类比使用结构更好。