【发布时间】:2016-05-18 12:32:42
【问题描述】:
我正在尝试在类扩展中创建通用函数,但出现编译器错误。
我也有 A 类和 B 类,都扩展了 NSManagedObject
我想在我的类扩展中创建一个findOne() 函数。
extension NSManagedObject {
public class func findOne() -> NSManagedObject {
// some working stuff returning a NSManagedObject
}
}
我的问题是:当我在A上使用这个方法时,返回类型是NSManagedObject
let aObject = A.findOne //type is NSManagedObject
所以,显然我可以转换它并获得一个 A 类对象
let aObject = A.findOne as! A//type is NSManagedObject
从这里开始,我想替换我的扩展实现以使用泛型,让我拥有:
let aObject = A.findOne //type is A
我试过这个:
extension NSManagedObject {
public class func findOne<T>() -> T {
// some working stuff returning a NSManagedObject
}
}
但是A.findOne() 仍然是NSManagedObject 类型。
谁能帮帮我?
更新 如果我使用以下代码实际上可以工作:
class func findOne<T : NSManagedObject>() -> T {
//Do some stuff
return myObject as! T
}
let myObject : A = A.findOne()
【问题讨论】:
-
您可能希望使用
Self作为返回类型。 -
@Alessandro:为什么在标题和标签中添加“OS X”? iOS 上也存在 Core Data,这个问题中没有任何内容是特定于 OS X 的。
-
@Martin R NSManagedObject 在 iOS 和 OSX 上都存在,我只想在标签上添加。标题上是我的错误说明。