gpt4 book ai didi

swift - 任何类型的初始化类(通用函数)

转载 作者:行者123 更新时间:2023-11-30 12:02:01 25 4
gpt4 key购买 nike

我在这里敲着头...我想做这样的事情...

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]

最佳答案

您没有按照应有的方式进行操作,实际上您需要指定将由所有 Object 类继承的协议(protocol)。它会说我可以解析由模型实现的 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
}
}

关于swift - 任何类型的初始化类(通用函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com