Это мой первый раз, когда я использовал singleton для совместного использования экземпляра объекта в swift. Кажется, что все работает отлично, за исключением тех случаев, когда я пытаюсь добавить элемент в массив (доступ из другого класса), который живет в моем одиночном объекте. Он действительно не добавляет никаких объектов в массив вообще. Я думаю, что он добавляется к массиву, но не к тому же экземпляру класса, который мне бы хотелось (поскольку мне нужен только один и только один экземпляр). Однако, если я добавляю элементы в массив из init() класса, все работает отлично. Вот код (я упростил все классы, чтобы сделать вещи более очевидны):Доступ к объекту singleton в swift
Файл 1:
class Brew: NSObject {
var method = Method()
//Singleton variable
private static var currentBrew: Brew?
//Method to get the current (and only) brew object
static func getCurrentBrew() -> Brew {
if currentBrew == nil {
currentBrew = Brew()
}
return currentBrew!
}
}
struct Method {
var chemex = Device()
init() {
//If I append here - everything works fine
//chemex.instructions.append = (Instruction(title: "Prepare", direction: "Prewet & Heat", time: 3, water: 0))
}
}
struct Device {
var instructions = [Instruction]()
init() {
instructions.append(Instruction(title: "None", direction: "None", time: 1, water: 0, index: 0))
}
Файл 2: (где я хотел бы добавить в массив инструкций)
let brew = Brew.getCurrentBrew() //How i'm accessing the object
//I'm calling this method from viewDidLoad to set up the array
func setupBrewDevices() {
//This is the line that does not actually append to the singleton instance
brew.method.chemex.instructions.append(Instruction(title: "Extraction", direction: "Match water.", time: 8 , water: 25))
Просто боковое примечание. Я также попытался сделать метод, который добавит инструкцию в массив, который живет внутри одного и того же класса, но имеет тот же результат. Надеюсь, это достаточно ясно - я ценю любую помощь!
Спасибо, Коул
Добавление 'private init() {}' не позволяет кому-то инициализировать несколько экземпляров 'Brew'. Я также удалю часть ': NSObject'. –
Отлично, спасибо за это. Я все еще работаю над решением, но хорошо устранить половину беспорядка. – Induction