我有一个这样的JSON解析类
class JSONParser: NSObject {
let newJSONDecoder : JSONDecoder
let data : Data
init(decoder: JSONDecoder, data: Data, model: ) {
self.newJSONDecoder = JSONDecoder()
self.data = data
}
}
目标是让 model
参数成为一个可以接收任何数据和任何模型并创建一个对象并将其返回给调用类实例的类。下面的EG
let jsonParser = JSONParser(myDecoder, data, struct)
let parsedArray = jsonParser.createJSONArray()
我可以将结构传递给类型为 struct
而不是结构“类”名称(例如 ModelStruct)的 JSONParser init 方法吗?
最终,应该在这个函数中使用结构参数
试试 newJSONDecoder.decode(model.self, from:data!)
,所以第二个问题是如何将它放入该函数中 - 如果打印为字符串,则无法使用。
最佳答案
您可以执行如下操作:
class JSONParser: NSObject {
let newJSONDecoder : JSONDecoder
let data : Data
init<T: Codable>(data: Data, model: T.Type) {
self.newJSONDecoder = JSONDecoder()
do {
let result = try self.newJSONDecoder.decode(model.self, from: data)
print(result)
} catch let err {
print(err.localizedDescription)
}
self.data = data
}
}
你的模型结构:
struct TestModel: Codable {
let name: String
let age: Int
}
如何调用 init:
let str = """
{"name": "Robert", "age" : 35}
"""
let data = str.data(using: .utf8)
let jsonParser = JSONParser(data: data!, model: TestModel.self)
关于Swift 传入结构作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52159113/