Swift2 Swift 2尝试接住,而不是放过
我正在努力将我的逻辑转换为Swift 2,从1.2中的工作正常,希望有人能启发我,好吗 这是Swift 1.2,允许我更新记录或插入新记录Swift2 Swift 2尝试接住,而不是放过,swift2,Swift2,我正在努力将我的逻辑转换为Swift 2,从1.2中的工作正常,希望有人能启发我,好吗 这是Swift 1.2,允许我更新记录或插入新记录 if let people: [People] = DataManager.getContext().executeFetchRequest(fetchRequest) as? [People] { // stuff here DataManager.saveManagedContext() } else i
if let people: [People] = DataManager.getContext().executeFetchRequest(fetchRequest) as? [People] {
// stuff here
DataManager.saveManagedContext()
}
else if let person: People = NSEntityDescription.insertNewObjectForEntityForName(entityNamePeople, inManagedObjectContext: DataManager.getContext()) as? People {
// stuff here
DataManager.saveManagedContext()
}
但现在在Swift 2中,我有了它,我认为它与1.2代码中的第一个if语句相同,并允许更新记录,但不再是if/else,我如何操作插入部分
do {
let people:[People] = try DataManager.getContext().executeFetchRequest(fetchRequest) as! [People]
// stuff here
DataManager.saveManagedContext()
} catch {
}
如果让与一起尝试,您仍然可以使用:
do {
if let people = try DataManager.getContext().executeFetchRequest(fetchRequest) as? [People] {
// stuff here
} else if let person = try NSEntityDescription.insertNewObjectForEntityForName(entityNamePeople, inManagedObjectContext: DataManager.getContext()) as? People {
// stuff here
}
DataManager.saveManagedContext()
} catch {
print(error)
}
注意:我没有验证你的函数是否真的抛出,我只是回答了
if-else
问题,所以我在我的示例中使用了try
,但你必须检查它是否正确。你仍然可以使用if-let
和try
:
do {
if let people = try DataManager.getContext().executeFetchRequest(fetchRequest) as? [People] {
// stuff here
} else if let person = try NSEntityDescription.insertNewObjectForEntityForName(entityNamePeople, inManagedObjectContext: DataManager.getContext()) as? People {
// stuff here
}
DataManager.saveManagedContext()
} catch {
print(error)
}
注意:我没有验证你的函数是否真的抛出,我只是回答了
if else
问题,所以在我的示例中,我对这两个问题都使用了try
,但你必须检查它是否正确。检查此代码,使用guard/throws可以更好地帮助你
guard let people: [People] = DataManager.getContext().executeFetchRequest(fetchRequest) as? [People] else { throw MessageType.description }
// stuff here
DataManager.saveManagedContext()
guard if let person: People = NSEntityDescription.insertNewObjectForEntityForName(entityNamePeople, inManagedObjectContext: DataManager.getContext()) as? People { throw throw MessageType.description }
// stuff here
DataManager.saveManagedContext()
检查此代码,使用guard/throws可以更好地帮助您
guard let people: [People] = DataManager.getContext().executeFetchRequest(fetchRequest) as? [People] else { throw MessageType.description }
// stuff here
DataManager.saveManagedContext()
guard if let person: People = NSEntityDescription.insertNewObjectForEntityForName(entityNamePeople, inManagedObjectContext: DataManager.getContext()) as? People { throw throw MessageType.description }
// stuff here
DataManager.saveManagedContext()
谢谢你的快速回复。这部分解决了问题,但else if生成警告“try”表达式中没有调用抛出函数??啊,是的,这是我在回答中的要点:我没有检查
DataManager.getContext().executeFetchRequest
和NSEntityDescription.insertNewObjectForEntityForName
是否实际抛出,我只是以您的示例代码为基础。只需删除就可以尝试使用不抛出的方法。谢谢!这真的让我感到紧张,因为从一个完全正常的应用程序到如此大量的错误,我感到完全迷失了方向!我现在看到了抛出的func和没有抛出的func。我试图接受你的回答,但论坛报道我没有足够的声誉…谢谢你的快速回复。这部分解决了问题,但else if生成警告“try”表达式中没有调用抛出函数??啊,是的,这是我在回答中的要点:我没有检查DataManager.getContext().executeFetchRequest
和NSEntityDescription.insertNewObjectForEntityForName
是否实际抛出,我只是以您的示例代码为基础。只需删除就可以尝试使用不抛出的方法。谢谢!这真的让我感到紧张,因为从一个完全正常的应用程序到如此大量的错误,我感到完全迷失了方向!我现在看到了抛出的func和没有抛出的func。我试图接受你的回答,但论坛报道我没有足够的声誉。。。。