2015-09-25 53 views
1

我很努力地將我的邏輯轉換爲Swift 2,從1.2中的工作正常,並希望有人能夠啓發我嗎?Swift 2嘗試抓取,而不是如果讓

這是雨燕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() 
    } 

但現在斯威夫特2我有這個這是我覺得一樣的第一個if語句中1.2代碼並允許更新記錄,但不再更多if/else如何操作插入部分?

do { 

     let people:[People] = try DataManager.getContext().executeFetchRequest(fetchRequest) as! [People] 

     // stuff here 

     DataManager.saveManagedContext() 

    } catch { 

    } 

感謝advanve

回答

1

你仍然可以使用if lettry

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,但是您必須檢查它是否正確。

+0

感謝快速回復。這部分解決了這個問題,但是如果產生警告,其他部分在'try'表達式中沒有發生調用拋出函數的情況。 – Piginhat

+0

啊,是的,這是我在答案中的注意點:我沒有檢查'DataManager.getContext()。executeFetchRequest'和'NSEntityDescription.insertNewObjectForEntityForName'實際* throw *,我只是使用你的示例代碼作爲基礎。只要移除不會拋出的方法的「try」即可。 – Moritz

+0

謝謝!這真的讓我感到t as不安,因爲從應用程序中完全感覺完全失去了這種錯誤!我現在看到了這個功能,而那個功能沒有。我試圖接受你的答案,但論壇報告我沒有足夠的聲譽.... – Piginhat

-1

檢查這個代碼,使用後衛/罰球幫助您更好地

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()