Я не могу найти способ сделать эту функцию многократно используемой в моем приложении (Swift 4.2), я хотел бы добавить в UIViewController через расширение, но я думаю, что это как-то не разрешено.Даже использование проблемы inout, по-видимому, не решено при перемещении и манипулировании им для «повторного использования» в остальной части приложения. Я получаю большинство из двух ошибок:
, если я пытаюсь установить аргумент метода «asyncFetch: NSAsynchronousFetchRequest»Я иду ошибка Не могу присвоить значение: «asyncFetch» является константой «let», то же ошибка, если я пытаюсь добавить аргумент для массива
вторая ошибка возникает, когда я пытаюсь сделать func вернуть массив изNSmanagedObject, и я не могу использовать оператор guard, поскольку они «return» предназначены для возврата самого функционала (и более того, поскольку он асинхронный, не может возвращать заполненный массив, а только пустой)
func asyncFetchAllEntities() {
print("Fetching all entities...")
asyncPersonEntityArray.removeAll(keepingCapacity: true)
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let managedContext = appDelegate.persistentContainer.viewContext
let personFetch : NSFetchRequest<Person> = Person.fetchRequest()
//here you can add some predicate
//this block makes the fetch Asynch - start :
//************************************************************************************
asyncFetchRequest = NSAsynchronousFetchRequest<Person>(fetchRequest: personFetch) {
[unowned self] (result: NSAsynchronousFetchResult) in
guard let allPersonsResult = result.finalResult else {
return
}
self.asyncPersonEntityArray = allPersonsResult
//here you can do what you need - start :
//************************************
do {
self.asyncPersonEntityArray = try managedContext.fetch(personFetch)
if self.asyncPersonEntityArray.count > 0 {
print("OK - asyncFetchAllEntities: - entity model is not empty!") //
} else {
// self.myPersErrorMessage(errorMessage: "WARNING! - no entitites error 1")
print("WARNING! - no entitites error 1")
}
} catch let error as NSError {
print("WARNING! - asyncFetchAllEntities: Fetch error: \(error) description: \(error.userInfo)")
}
guard self.asyncPersonEntityArray != nil else {return}
//here you can do all you want as updating tableview, make som check, etc:
for personFound in self.asyncPersonEntityArray {
let personToPrint = personFound as! Person
guard personToPrint.name != nil else {
print("WARNING! : - name was nil!!")
return
}
print("Name is: \(personToPrint.name!) and age: \(personToPrint.age)")
}
print("...Fetched all entitites")
//here you can do what you need - end :
//************************************
}
//this block makes the fetch Asynch - end :
//************************************************************************************
// MARK: - async fetch request 3
do {
try managedContext.execute(asyncFetchRequest)
} catch let error as NSError {
print("WARNING! - asyncFetchAllEntities: Could not fetch \(error), \(error.userInfo)")
}
print("OK! - fetched completed")
//end of function
}