我终于尝试将我的一个Objective-C应用程序转换为Swift 3.1。我还在Swift上做了一个教程来帮助我。然而,当我尝试将'for in'循环转换为在Obj-C中成功运行的Swift时,我遇到了以下错误。我已经发布了下面的Swift和Objective-C代码,并在Swift中评论了我得到错误的那一行。我得到的错误与 for managedObject: NSManagedObject in myResults{
Objective-C转换为Swift 3.1出现错误'Any'不可转换
的错误状态
“任何”是无法转换为“MSManageObject”
任何帮助指着我在正确的方向是极大的赞赏。
//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!");
}
}
}
除了@ Alistra的推荐之外,它还实施了它,并接受了Swift提出的修正某些问题的建议。 – bachma0507