Je suis enfin en train de tenter de convertir une de mes applications Objective-C en Swift 3.1. Je prends également un tutoriel sur Swift pour m'aider. Cependant, je rencontre l'erreur suivante en essayant de convertir une boucle 'for in' en Swift qui a fonctionné avec succès dans Obj-C. J'ai posté le code Swift et Objective-C ci-dessous et j'ai commenté la ligne dans Swift où je reçois l'erreur. Je reçois l'erreur avec for managedObject: NSManagedObject in myResults{
Objective-C convertir en Swift 3.1 obtenir l'erreur «Tout» n'est pas convertible
Les états d'erreur
'Tout' est pas convertible 'MSManageObject'
Toute aide me pointant dans la bonne direction est grandement appréciée.
//IN SWIFT 3.1
let context: NSManagedObjectContext? =
CoreDataHelper.shared().context
let fetchRequest = NSFetchRequest<NSFetchRequestResult>()
let entity = NSEntityDescription.entity(forEntityName:
"Exhibitors", in: context!)
fetchRequest.entity = entity
var myResults : NSArray = try!
CoreDataHelper.shared().context.fetch(fetchRequest) as NSArray
self.objects = myResults as! [Any]
if !(myResults != nil) || !((myResults.count) != nil) {
print("No Exhibitor objects found to be deleted!")
}
else {
//****Getting error 'Any' is not convertible to 'NSManagedObject'
for managedObject: NSManagedObject in myResults {
if !(managedObject.value(forKey: "fav") == "Yes") {
context?.deleteObject(managedObject)
var error: Error? = nil
// Save the object to persistent store
if !context?.save(error) {
print("Can't Save! \(error) \
(error?.localizedDescription)")
}
print("Exhibitor object deleted!")
}
}
}
//IN OBJECTIVE-C
NSManagedObjectContext *context = [[CoreDataHelper sharedHelper]
context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]
init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Exhibitors" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *myResults = [[[CoreDataHelper sharedHelper]
context] executeFetchRequest:fetchRequest error:nil];
self.objects = myResults;
if (!myResults || !myResults.count){
NSLog(@"No Exhibitor objects found to be deleted!");
}
else{
for (NSManagedObject *managedObject in myResults) {
if (![[managedObject valueForKey:@"fav"]
isEqualToString:@"Yes"]) {
[context deleteObject:managedObject];
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error,
[error localizedDescription]);
}
NSLog(@"Exhibitor object deleted!");
}
}
}
Ceci en plus de la recommandation de @ Alistra a fonctionné après l'avoir implémenté et en acceptant ce que Swift suggérait pour résoudre certains problèmes qui surgissaient. – bachma0507