import Cocoa class TestObject { init() { print("Init \(self)") } deinit { print("Deinit \(self)") } } struct WeakReference { weak var reference: T? } class Object { private var _objects: [WeakReference] = [] var objects: [TestObject] { set(newValue) { self._objects = newValue.map({ WeakReference(reference: $0) }) } get { return self._objects.flatMap({ $0.reference }) } } } let object = Object() var testObject: TestObject? = TestObject() object.objects = [testObject!] print("BEFORE: \(object.objects)") testObject = nil print("AFTER: \(object.objects)") object.objects = [] print("Finish")