Скажем, например, у меня есть массив, который нужно использовать в нескольких классах, если мне нужен работник для обновления значений этого массива, как мне сделать так, чтобы при добавлении новых значений в указанный массив рабочий объект значение также меняется.
Пример:
class Object {
var id: Int
var foo: String
var bar: Int
init(id: Int, foo: String, bar: Int) {
self.id = id
self.foo = foo
self.bar = bar
}
}
class ObjectWorker {
var objects: [Object]
init(objects: [Object]) {
self.objects = objects
}
func updateObjects(withId id: Int) {
self.objects.forEach { $0.foo = "a different value" }
}
}
class SomeClass {
// this declaration will happen on more than one class
var objects: [Object] = ... // let's just say there are 10 objects here
lazy var worker = ObjectWorker(objects: self.objects)
init() {
// to initialize the workers
_ = worker
print(objects.count) // 10
print(worker.objects.count) // 10
let newObjects: [Object] = ... // let's say this has 5 new values
objects.append(contentsOf: newObjects)
print(objects.count) // 15
print(worker.objects.count) // 10
}
}
Я попытался сделать инициализацию ObjectWorker
параметром inout
, подобным этому init(objects: inout [Object]
, но даже тогда результат остается тем же. updateObjects
работает, даже если init
не является параметром inout
.
Примечание :
Я знаю, что могу сделать это, используя ObjectWorker
в качестве контейнера объектов вместо того, что здесь происходит в настоящее время, но есть ли способ сделать это без этого?
Вместо этого я могу использовать статические функции, но давайте не будем идти туда