我試圖重構struct的init方法。 Init接收字典並從中初始化結構。有幾個長的解析邏輯部分(遍歷數組等)和init太長。我試圖提取這種邏輯功能分開,但是編譯器告訴我(榮譽新的Xcode的重構功能!):從結構初始化提取函數
self
使用的所有存儲屬性初始化之前
有什麼辦法來重構我的凌亂初始? 我想到了創建單獨的Parser
類的想法,但模型的res(真的很大的項目)解析了每個結構中的JSON init
。因此,創建這個Parser
類將使項目不一致......
示例代碼:
struct Example {
let intParam: Int
let dates: [Date]
// Current implementation
init(dictionary: [String: Any]) {
self.intParam = dictionary["intParam"] as? Int ?? 0
var dates: [Date] = []
// long parsing here
self.dates = dates
}
// Desired implementation
init(dictionary: [String: Any]) {
self.intParam = dictionary["intParam"] as? Int ?? 0
self.dates = parseDates(dictionary)
}
private func parseDates(_ dictionary: [String: Any]) -> [Date] {
var dates: [Date] = []
// long parsing here
return dates
}
}
您的代碼沒有意義,且您的結果無法複製。你說你在所有存儲的屬性初始化之前得到「自我使用」,但我沒有;我們從來沒有達到那個地步,因爲'dictionary [「intParam」] ?? 0'不編譯。 – matt
你可以使功能靜態 – dan
此外,這個問題本身似乎沒有任何意義。你不能有一個'[String:Int]'的字典,它也是'[String:Date]'的字典。我沒有看到你認爲你要這樣做的地方。 – matt