0

我来自 Objc 背景和 swift 新手。

这个注释是什么意思“///以静态方式使用”

/// Used in a static manner
struct RecentItemsController {
    fileprivate init() { }
}

我真的需要这个 init() 吗?

在整个代码库中我没有写RecentItemsController(),那为什么需要这个构造函数定义呢?

4

1 回答 1

0

fileprivate 保证您不能从此类实例化新对象。所以这是不可能的:

let recentItemsController = RecentItemsController()

注意:'()'。

认为它打算用作单例。

这就是使它成为静态的原因,这就是为什么您从未编写或找到此类的新实例的原因。

你应该在你的类中拥有这个静态类的共享实例RecentItemsController

static let sharedRecentItemsController = RecentItemsController()

并在需要的任何地方使用该实例,如下所示:

let recentItemsController = RecentItemsController.sharedRecentItemsController

这保证了您在代码中的任何地方都使用相同的对象(因此是静态的)。

额外信息:

fileprivate几乎与常规属性相同,常规private属性包含在该类中,但使其可用于扩展。

还可以在这个不错的博客文章中阅读更多关于静态和单例类的信息

编辑

我想我会添加这个:也可能是 init 设置为 private 以绝对保证不能为结构创建新实例,因为结构提供了一个成员初始化器:

如果结构类型没有定义任何自己的自定义初始值设定项,则结构类型会自动接收成员初始值设定项。与默认初始值设定项不同,结构接收成员初始值设定项,即使它存储了没有默认值的属性。- Apple Developer,部分:结构类型的成员初始化器

因此,如果您实际上将其用作 Singleton,则使用类比使用结构更好。

于 2017-11-09T15:17:21.757 回答