2016-11-22 26 views
3

我在使用新的Swift 3 iOS應用程序時,一直在使用Realm幾天,總體而言,與CoreData一起工作肯定更令人愉快。Realm()如何工作?

但是,文檔似乎並不足夠詳盡,幫我找出到底是什麼......

let realm = try! Realm() 

...不,和是否有意義(或者甚至是必要的)使用此行的多個版本,或者如果一個調用對於整個應用程序就足夠了。

因此,如果任何對Realm有深入瞭解的人都能提供幫助,我會很感激。

我的問題,按重要性排序:

  1. 究竟上面的代碼行做什麼?只要應用程序仍在運行,它是否會打開某種文件管理器流,然後允許我的應用程序從Realm數據文件讀寫數據文件?

  2. 或者我需要在每個Realm讀/寫操作之前使用此行嗎?或者它處於兩個極端之間,例如需要在每個單獨的類/視圖控制器中調用,而不是在每個讀/寫操作之前調用?

  3. 爲什麼Realm使用try!及其所有方法?這僅僅是爲了在各種教程和示例源文件中簡化演示的目的嗎?或者我們真的打算在使用Realm時抑制生產中的錯誤?

希望任何和所有輸入,作爲王國的文檔和示例文件似乎並沒有提供這些問題的答案,除非我瞎了,這是一個可能性,所以我願意爲指出適用的相關文件/參考頁。

回答

1

感謝您使用境界!我們會考慮使文檔更清晰。在此期間:

  1. 該行代碼爲您提供Realm的實例,realm。特別是,Realm()爲您提供了默認領域,它只是使用默認配置對象指定其配置的領域。(目的是如果你的應用程序只有一個Realm,你可以簡單地使用這個API來獲得對它的引用,而不必顯式地傳入一個配置結構。)你可以調用這個實例的APIs,就像使用任何其他的Swift對象,或將它傳遞給需要參數Realm的其他API。
  2. 像普通對象一樣使用realm實例,不用擔心流或任何其他隱藏狀態。唯一的限制是你不應該在線程或隊列之間傳遞Realm實例。
  3. try!在我們的文檔中主要是爲了簡潔。產品應用程序是否需要避免使用try!取決於是否可以合理地期望從失敗的嘗試打開Realm中恢復,以及在Realm無法打開時是否需要發生特殊行爲。您可以看到可能的錯誤here

最後一點:Realm(這是磁盤上的數據庫)和Swift中Realm類的實例之間有一個重要區別。如果使用相同的配置值創建多個Realm實例,則可以引用相同的底層Realm數據庫。例如,您可能在應用程序的不同部分或不同線程上使用多個Realm實例(以遵守上述同線程要求)。我們的一些用戶選擇創建一個'manager'單例對象,該對象在啓動時打開特定的Realm,處理可能發生的任何錯誤,並將Realm實例發佈到可能需要從數據庫讀取或寫入的UI代碼。當然,這種模式是否適合您取決於您​​的編碼風格和應用程序的特定需求。

希望有幫助!

0

此基礎上我的知識,可能不是真正正確的:

  1. 這行代碼將創建一個領域實例來控制領域的寫/在當前線程讀取,在這種情況下,你在呼喚與境界你可以修改配置,如果你需要另一個配置,如數據庫名稱,路徑,...
  2. 你不需要,只要你在你的當前課程中創建它或只使用默認的Realm(),意味着你仍然需要它,但可以讓它變成類變量或其他東西
  3. try意味着它可以拋出err或者,你可以處理,如果你想使用try!意味着你跳過錯誤,如果你要處理它,結合docatch處理如果錯誤發生