Swift2 Swift 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

我正在努力将我的逻辑转换为Swift 2,从1.2中的工作正常,希望有人能启发我,好吗

这是Swift 1.2,允许我更新记录或插入新记录

 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。我试图接受你的回答,但论坛报道我没有足够的声誉。。。。