我有一个函数来获取我想要通用的数据。有3个可能的类,我们可以调用它们:
这是当前适用于一个类的函数,但它不能与所有类重用。问题是类型转换。如果我有一个参数并使用该参数进行类型转换,那么它将返回一个错误,表明它不是一个类型。在这个函数中,我使用了类型转换as! [ClassOne]
,我不知道如何为所有类创建这个泛型。
func fetchFromCoreData() {
let fetchRequest = NSFetchRequest(entityName: ClassOne)
do {
let fetchedEntity = try appDelegate().coreDataStack.managedObjectContext.executeFetchRequest(fetchRequest) as! [ClassOne]
// Do something with fetchedEntity
currentlyReadingSet = fetchedEntity.first
} catch let error as NSError {
print("Could not fetch: \(error)")
}
}
我想创建一个可用于所有三个类的函数。
有什么想法吗?
答案 0 :(得分:2)
看看子类的力量。在这里,我们准备了三个派生自超类的类,表达了他们都可以做的事情:
class MySuper: NSObject {
func thingTheyAllCanDo() {
print("I did it and I am a \(self.dynamicType)")
}
}
class ClassOne : MySuper {
}
class ClassTwo : MySuper {
}
class ClassThree : MySuper {
}
现在这里有一些代码可以对所有三个类的实例执行某些操作,无论它是什么:
let arr : [MySuper] = [ClassOne(), ClassTwo(), ClassThree()]
for aMySuper in arr {
aMySuper.thingTheyAllCanDo()
}
输出:
I did it and I am a ClassOne
I did it and I am a ClassTwo
I did it and I am a ClassThree
“泛型”在这里真的不是你的意思吗?