Контроллеры в моей базе кода в 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, раздел: Инициализированные по элементам для типов структуры
Так что, если бы вы на самом деле использовали его как синглтон, было бы лучше использовать класс, чем структуру.