WeakArray.swift 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // WeakArray.swift
  3. // flutter_callkit_incoming
  4. //
  5. // Created by Mostafa Ibrahim on 18/01/2023.
  6. //
  7. import Foundation
  8. class WeakBox<T:AnyObject> {
  9. weak var unbox: T?
  10. init(_ value: T?) {
  11. unbox = value
  12. }
  13. }
  14. struct WeakArray<T: AnyObject> {
  15. private var items: [WeakBox<T>] = []
  16. init(_ elements: [T]) {
  17. items = elements.map { WeakBox($0) }
  18. }
  19. init(_ elements: [T?]) {
  20. items = elements.map { WeakBox($0) }
  21. }
  22. mutating func append(_ obj:T?) {
  23. items.append(WeakBox(obj))
  24. }
  25. mutating func remove(at:Int) {
  26. items.remove(at: at)
  27. }
  28. mutating func reap() -> Self {
  29. items = items.filter { nil != $0.unbox }
  30. return self
  31. }
  32. }
  33. extension WeakArray: Collection {
  34. var startIndex: Int { return items.startIndex }
  35. var endIndex: Int { return items.endIndex }
  36. subscript(_ index: Int) -> T? {
  37. return items[index].unbox
  38. }
  39. func index(after idx: Int) -> Int {
  40. return items.index(after: idx)
  41. }
  42. }