【发布时间】:2017-11-23 17:33:22
【问题描述】:
我在这里敲打我的头
。
我正在尝试解决这个“容易”理解的问题。
我有一个API Endpoint,我将其发送给许多不同班级的请求。假设我有一个 Tweet 类和 User 类。
class Tweet {
var id: String!
var description: String!
required init() { }
}
class User {
var id: String!
var username: String!
var likes : Int!
required init() { }
}
现在,根据Class 请求的来源,我将收到Array 的响应,其中每个元素都具有与源Class 和JSON 完全相同的属性。来自TweetClass的示例请求:
"data":
[{
{
"id": "492",
"description": "HELP!"
},
{
"id": "574",
"description": "ME!"
}
]}
现在,我正在尝试创建一个 Generic Method,它会自动将这些解析为 Array,其中包含来自传递 Class 类型的对象。
这是我尝试过的
func sendRequest<T>(resource: T.Type,withProperyList propList : [String], completion: @escaping ([T]?) -> ()) {
// Create NSURLSession request, fetching data.. converting to json..
guard let mainArray = json["data"] as? NSArray else { return }
for element in mainArray {
let tweet = T() // **Error here**
}
错误:** 'T' 无法构造,因为它没有可访问的初始化程序
如何以通用方式访问我的Generic Type Class?这意味着我将传递Class 类型并能够将其应用于'T'。我已经尝试将输入参数传递给它,但它无济于事。我就是想不通。有什么想法吗?
【问题讨论】:
-
等待 Swift 4 及其内置的 JSON en-/decoder。由于您的类包含不同的属性,因此无论如何都无法使用泛型。
-
嘿@vadian。感谢您的回复。你知道什么时候正式发布吗?
-
没有,但通常在 9 月或 10 月
-
@vadian 酷。嘿 vadian,我知道它没有被占用,但我想知道我们是否有机会为我在 Swift 中遇到的问题打开一个快速聊天。它是关于存储和检索具有大量对象的数组。完全理解如果你会拒绝:)
-
请提问。
标签: ios swift generics types initialization