【问题标题】:Swift: Trying to create a generic type initializerSwift:尝试创建一个泛型类型初始化器
【发布时间】: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 的响应,其中每个元素都具有与源ClassJSON 完全相同的属性。来自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


【解决方案1】:

试试这个,而不是T()

let tweet = resource.init()

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多