[AltStoreCore] Backports iOS 15+ NSManagedObjectContext.performAndWait<T>()

Simplifies returning values and throwing errors from managed object contexts.
This commit is contained in:
Riley Testut
2023-05-16 15:15:43 -05:00
committed by Magesh K
parent bec6ca9eec
commit 177d453491
3 changed files with 50 additions and 9 deletions

View File

@@ -0,0 +1,37 @@
//
// NSManagedObjectContext+Conveniences.swift
// AltStore
//
// Created by Riley Testut on 5/16/23.
// Copyright © 2023 Riley Testut. All rights reserved.
//
import CoreData
public extension NSManagedObjectContext
{
// Non-throwing
func performAndWait<T>(_ closure: @escaping () -> T) -> T
{
var result: T!
self.performAndWait {
result = closure()
}
return result
}
// Throwing
func performAndWait<T>(_ closure: @escaping () throws -> T) throws -> T
{
var result: Result<T, Error>!
self.performAndWait {
result = Result { try closure() }
}
let value = try result.get()
return value
}
}