2017-07-03 51 views
0

我使用鏡像將所有自定義類轉換爲字典,以便將它們保存爲類似結構的plist。通過鏡像,我只需按名稱存儲每個值,因此具有變量「title」的類將變成一個字典,其中包含關鍵字「title」及其在字典中的值。將字典轉換爲自定義類型

問題是,如何扭轉這種情況?我在每本字典中都存儲了一個「類型」信息,所以我知道字典應該變成哪種類型,但我不知道如何進行轉換。我曾經在Objective-C中使用setValue: forKey:,但隨着我轉向Swift,我有許多結構不再適用。

我能想到的唯一解決方案是讓所有自定義類型符合描述init(dictionary: [String: Any])函數的協議,然後手動將字典轉換爲該類型。在我的通用轉換器函數中,然後獲取類型並通過switch語句簡單地調用正確類型的init。這似乎愚蠢透頂不過,手動編寫

title = dictionary["title"] 

的數千家酒店我在整個應用程序。有更容易的方法嗎?

回答

0

我認爲你已經佈置的選項是可以的。我建議使用一個可選的init,如init?(dictionary: [String: Any]),如果您打算這樣做,那麼您可以確保某些鍵值對可用,如果最終對象不完整,則返回nil。

但是,這聽起來像你可以肯定受益於像MantleObjectMapper,它們都很好地處理序列化。

+0

感謝tbogoisa的鏈接。如果可以避免使用外部庫,我並不是很喜歡使用外部庫,尤其是在快速變化的情況下。話雖如此,作爲最後的手段,總比沒有好。至於初始化,它的工作原理是真實的,但我的問題是,我有許多變量的結構與字典中的鍵完全命名,似乎幾乎沒有意義寫所有代碼,所以我希望有一個通用的方法這一切照顧它。用Mirror做它的事情,似乎很難相信沒有。 –

+1

嗯,你是(半)幸運的。雖然我不相信目前你的描述是一種語言功能,但蘋果今年在WWDC上宣佈,在下一次更新中,對象序列化將得到更好的支持。 https://medium.com/@vonkunesnewton/thoughts-after-two-days-of-wwdc-2017-1b7ec5b44cca – tbogosia