我在这里敲我的头......我想做这样的事......
func serialize(into object: Any) -> [Object]{
var temp = [Object]()
if object is Project{
temp = [Project]()
for (_,j): (String,JSON) in self {
temp.append(Project(json: j))
}
}
if object is Evaluation{
temp = [Evaluation]()
for (_,j): (String,JSON) in self {
temp.append(Evaluation(json: j))
}
}
return temp
}
在编译时,它不会返回任何值。 if object is ...
都没有得到满足。我尝试过我理解为仿制药的变体吗?但我不完全理解他们。
func serialize<T>(into object: T.Type) -> (T){ }
我希望能够将此扩展名用于init
已调用并返回的特定类。我尝试使用的所有类都由领域Object
类继承。我目前正在调用这个函数(这显然是一个扩展)
let projects = json["projectList"].serialize(into: Project.self) as! [Project]
答案 0 :(得分:0)
我认为它无法正常工作,因为您在发送类型时正在比较实例。
你能试试吗?
Swift 3
因为你发送:
serialize(into: Project.self)
您需要使用这种比较:
if b.isKind(of: YourSpecificCalss.self) {...}
这应该是你想要进行比较的方法。
答案 1 :(得分:0)
你做的不是它应该工作的方式,事实上你需要指定将由你的所有Object
类继承的协议。它会说我可以解析模型实现的JSON。所以我们可以做类似的事情:
enum JSONError: Error {
case couldNotParse
}
protocol JSONable {
static func toJSON(json: JSON) throws -> Self
}
final class Project {
// required field
}
extension Project: JSONable {
static func toJSON(json: JSON) throws -> Project {
// guard required field check else { throw JSONError.couldNotParse }
let project = Project()
return project
}
}