我正在尝试创建一个返回通过REST API JSON响应获得的对象的泛型函数。我想为类型提供泛型,让它提交请求/解析JSON,并返回提供类型的对象列表(例如Item)。我有获得JSON响应的部分,但使用泛型对我来说是新的。这是一个让我感到困惑的伪代码:
class Model {
func setPropertiesFromJSON(data: NSData) {
// Lookup property names of object and set from JSON fields.
}
}
class Item : Model {
var a
var b
}
class RestEndpoint {
func getModels<T>() -> [T] {
let data: NSData = ... // Submit GET request and receive JSON data.
var models = [T]()
for objectData in data {
// How to create newobj as T (subtype of Model), set its properties,
// and add it to models array?
// let newobj: T as? TrackminiModel = T()
// newobj.setPropertiesFromJSON(objectData)
// models.append(newobj)
}
return models
}
}
let restEndpoint = RestEndPoint()
var items: [Item] = restEndpoint.getModels<Item>()
注释掉的代码非常不正确,但这就是目标。有关如何做到这一点的任何想法?
答案 0 :(得分:2)
从您的问题来看,这听起来像您感兴趣的是一个相当普遍的需求。使用Restful API与后端服务器通信的能力。您可以继续沿着您似乎正在创建大量代码的路径来完成此任务,并且此答案不会在该方向上提供太多帮助。
但是,我想指出两个开源库ObjectMapper,我认为这些库可以解决您的问题。这是ObjectMapper的简要描述(来自其github页面)。
ObjectMapper是一个用Swift编写的框架,可以轻松实现 您可以将Model对象(Classes和Structs)转换为 JSON。
第二个项目是AlamofireObjectMapper,我认为最终可能正是您正在寻找的。以下是该项目githup页面的简要说明。
Alamofire的扩展,可自动转换JSON响应 使用ObjectMapper将数据转换为swift对象。
所有这些都建立在Alamofire之上,它处理与Restful API进行通信的所有细节。
这里再次简要介绍Alamofire。
Alamofire是一个用Swift编写的HTTP网络库。
你可能觉得拿起其他图书馆来完成一些任务就是&#34;作弊&#34;你有机会自己学习如何做某事,但制作应用程序仍然存在很多挑战。有人会说没有利用这些开源库是无差别的重举#34;