Fixes “stored properties cannot be marked @available” compiler error

Xcode 13 and earlier allowed us to mark lazy stored properties with @available, but it turns out this was never actually supported. Xcode 14 now throws a compiler error, so we work around it by converting lazy @available properties into computed properties, backed by typed-erased lazy ivars.
This commit is contained in:
Riley Testut
2022-08-17 15:22:43 -05:00
parent 1bc2aa9d38
commit c1d64a8027
2 changed files with 40 additions and 8 deletions

View File

@@ -46,9 +46,6 @@ class AppManager
{
static let shared = AppManager()
@available(iOS 13, *)
private(set) lazy var publisher: AppManagerPublisher = AppManagerPublisher()
private(set) var updatePatronsResult: Result<Void, Error>?
private let operationQueue = OperationQueue()
@@ -67,8 +64,27 @@ class AppManager
}
}
@available(iOS 13.0, *)
private lazy var cancellables = Set<AnyCancellable>()
@available(iOS 13, *)
private(set) var publisher: AppManagerPublisher {
get { _publisher as! AppManagerPublisher }
set { _publisher = newValue }
}
@available(iOS 13, *)
private(set) var cancellables: Set<AnyCancellable> {
get { _cancellables as! Set<AnyCancellable> }
set { _cancellables = newValue }
}
private lazy var _publisher: Any = {
guard #available(iOS 13, *) else { fatalError() }
return AppManagerPublisher()
}()
private lazy var _cancellables: Any = {
guard #available(iOS 13, *) else { fatalError() }
return Set<AnyCancellable>()
}()
private init()
{