我終於嘗試將我的一個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