Инициализатор Swift недоступен из-за уровня частной защиты

#swift #singleton

#swift #singleton

Вопрос:

Я пытаюсь создать singleton в Swift, но я получаю эту ошибку:

инициализатор недоступен из-за уровня частной защиты

Вот мой код (одноэлементный класс)

 class mySingleton{

    private init() {    }
    static let sharedInstance = mySingleton()
    var numbers = 0

    func incrementNumberValue() {
        numbers  = 1
    }
}
 

Вот где я вызываю одноэлементный:

 override func viewDidLoad() {
    super.viewDidLoad()
    let single = mySingleton().sharedInstance
}
 

Вот ошибка:

введите описание изображения здесь Кто-нибудь из вас знает, почему или как я могу исправить эту ошибку?

Комментарии:

1. Вы установили для инициализатора значение private, но затем вызываете MySingleton() , который пытается инициализировать объект этого класса. Вы должны изменить его на MySingleton. sharedInstance

Ответ №1:

Ваша строка:

 mySingleton().sharedInstance
 

имеет опечатку. Как написано, вы пытаетесь создать экземпляр mySingleton , а затем вызвать sharedInstance метод для нового экземпляра. Это две ошибки.

Что вы на самом деле хотите, так это:

 mySingleton.sharedInstance
 

Теперь это вызывает константу sharedInstance типа в вашем mySingleton классе.

КСТАТИ — ожидается, что имена классов начинаются с прописных букв. Имена методов и переменных должны начинаться со строчных букв.

Ответ №2:

для использования объектом экземпляра

класс MySingleton{

 private init() {    }

static let sharedInstance = mySingleton()

var sharedInstanceByInstance: mySingleton{
    return mySingleton.sharedInstance
}
//Usage: mySingleton().sharedInstanceByInstance

// or

func getShared()-> mySingleton{
    return mySingleton.sharedInstance
}   
 //Usage: mySingleton().getShared()
}