Контроллеры в моей базе кода в swift определены как структура, а не классы

Я из Objc фона и новичок в Swift.

Что означает этот комментарий "/// Использовано в статической манере"

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

Мне действительно нужен этот init()?

Во всей кодовой базе я не написал RecentItemsController(), тогда зачем нужно это определение конструктора?

1 ответ

Fileprivate гарантирует, что вы не можете создавать новые объекты из этого класса. Так что это невозможно:

let recentItemsController = RecentItemsController()

Примечание: "()".

Я предполагаю, что это было предназначено, чтобы использоваться как синглтон.

Это то, что делает его статичным, и поэтому вы никогда не писали и не находили нового экземпляра этого класса.

Вы должны иметь общий экземпляр этого статического класса в соответствии с этим в вашем RecentItemsController учебный класс:

static let sharedRecentItemsController = RecentItemsController()

и использовать этот экземпляр везде, где это необходимо:

let recentItemsController = RecentItemsController.sharedRecentItemsController

что гарантирует, что вы используете один и тот же объект везде в вашем коде (следовательно, статический).

дополнительная информация:

fileprivate почти так же, как обычный private атрибут, который содержит его в этом классе, но делает его пригодным для использования в расширениях.

Также читайте больше о статических и одноэлементных классах в этом хорошем посте здесь

редактировать

Я подумал, что добавлю следующее: Возможно, что init установлен в private, чтобы абсолютно гарантировать, что новый экземпляр структуры не может быть создан, потому что структуры предоставляют элементный инициализатор:

Структурные типы автоматически получают элементный инициализатор, если они не определяют ни одного из своих пользовательских инициализаторов. В отличие от инициализатора по умолчанию, структура получает инициализатор по элементам, даже если она имеет сохраненные свойства, которые не имеют значений по умолчанию. - Apple Developer, раздел: Инициализированные по элементам для типов структуры

Так что, если бы вы на самом деле использовали его как синглтон, было бы лучше использовать класс, чем структуру.

Другие вопросы по тегам