【问题标题】:Swift - Generic methodsSwift - 通用方法
【发布时间】:2014-10-23 16:12:11
【问题描述】:

在 java 中,你可以有一个类似于下面的泛型方法,其中类型被显式指定并作为参数传递给方法。 swift可以做到这一点吗?

public T fetchObject(Class<T> clazz, int id) {
   // My table name is the same as class name
   // So based on the generic type passed to method I want to fetch that record.
}

User user = fetchObject(User.class, 5);

我正在努力实现的目标

public func fetchObject (id: Int /* Somehow pass the type */) -> T? {
   // I need a way to know what class type has to be used with this generic method
   // Create NSEntityDescription based on the generic class passed
   // managedObjectContext getExistingObjectById
}

【问题讨论】:

  • -1?评论如何?
  • @Zaph 我做到了,而且我已经知道如何在 swift 中编写通用函数。这是一种特殊情况,您还可以传递类类型
  • 是的,无缘无故的直接投票没有帮助,更像是黄鼠狼。
  • 您的问题是专门针对 NSManagedObject 的子类的吗?那么这个stackoverflow.com/questions/24834753/…stackoverflow.com/questions/24537238/… 可能会有所帮助。
  • 是的,我链接的问题/答案也是关于泛型函数的,并且都演示了如何将类型传递给函数。

标签: generics swift


【解决方案1】:

T.Type是我必须使用的,甚至比java处理这个更好

public func fetchObject<T> (id: Int, type: T.Type) -> T? {

}

用法

var myClass = fetchObject(5, MyClass.self)

【讨论】:

  • 在这种情况下一组重载不是更好吗?例如:func fetchObject(id: Int, type: User.Type) -&gt; User,或者更好:func fetchUser(id: Int) -&gt; User?
  • 这只是我为解释问题而提供的一个示例。我实际上想要实现的是一种方法,它采用字典和类类型,然后基于键/值创建并填充 NSManagedObject 并保存上下文
  • 那么,为什么不用键/闭包字典呢?也可能最终变得更加优雅。
  • 我希望它是自动化的,我可以控制 API 发送的内容,并且只要服务器/客户端之间的键/值匹配,我就不必一遍又一遍地编写代码是时候添加一个新模型了。我希望一切都通过一个通用方法自动化
  • 我在 Objective C github.com/aryaxt/OCMapper 中做过一段时间,由于 Objective C 的性质,它不是类型安全的。现在我正在尝试将这个库重写为类型安全
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多