我试图重构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