Из чтения кажется, что лучший совет для создания синглтона в Swift — использовать static let
следующим образом:
struct GameManager {
static let defaultManager = GameManager()
var gameScore = 0
var saveState = 0
private init() {}
}
GameManager.defaultManager.gameScore = 1024 // Error
GameManager.defaultManager.saveState = 12 // Error
let score = GameManager.defaultManager.gameScore
let savedProgress = GameManager.defaultManager.saveState
Поскольку defaultManager
объявлен как константа (с "let"), возникает ошибка, когда я пытаюсь назначить gameScore
и saveState
.
Я использую Xcode 7.0 beta 6 (7A192o) со Swift 2.0 (swiftlang-700.0.57.3 clang-700.0.72).
Если я изменю defaultManager
, чтобы он был объявлен как переменная (с «var»), не будет ли он больше считаться правильным синглтоном?
Если я изменю GameManager, чтобы он был объявлен как класс, а не как структура, тогда код работает так, как ожидалось.
class GameManager {
static let defaultManager = GameManager()
var gameScore = 0
var saveState = 0
private init() {}
}
GameManager.defaultManager.gameScore = 1024 // No error, why?
GameManager.defaultManager.saveState = 12 // No error, why?
let score = GameManager.defaultManager.gameScore // 1,024
let savedProgress = GameManager.defaultManager.saveState // 12
Можете ли вы объяснить, почему класс ссылочного типа лучше подходит для реализации синглтона, чем структура типа значения?