Почему Синглтон захватывает экземпляр себя? - PullRequest
0 голосов
/ 13 июня 2019

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

Насколько я понимаю, ключевое слово static позволяет использовать помеченное свойство или метод для всех экземпляров класса, и я уверен, что здесь есть роль, которую я не вижу полностью.

Кроме того, как это работает, когда мы рассматриваем создание экземпляра во время компиляции / выполнения?

Вот пример объявления класса Singleton:

class Person {
    static let details = Person()
    var name = "Alan Turing"
    let age = "42"
}

Я понимаю, что класс и его свойства будут созданы только один раз, и что любая ссылка на объект класса будет указывать на ту же точку в памяти. Моя путаница связана именно с тем, почему мы создаем первый экземпляр Синглтона внутри себя.

1 Ответ

2 голосов
/ 13 июня 2019

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

Имея статическую переменную внутри класса, которая содержит объект самого класса, вы гарантируете, что во время выполнения уже существует объект этого класса (или, по крайней мере, во время доступа к Person.instance в первый раз). Для истинного singleton внутри Swift необходимо сделать init этого класса private, хотя, вот так:


public class Person {
    static let instance = Person()
    var name: String
    let age: Int

    private init() {
        self.name = "Alan Turing"
        self.age = 42
    }
}

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

...