使函数通用 - Swift

时间:2016-02-20 02:52:07

标签: ios swift function generics protocols

我有一个函数来获取我想要通用的数据。有3个可能的类,我们可以调用它们:

  • ClassOne
  • ClassTwo
  • ClassThree

这是当前适用于一个类的函数,但它不能与所有类重用。问题是类型转换。如果我有一个参数并使用该参数进行类型转换,那么它将返回一个错误,表明它不是一个类型。在这个函数中,我使用了类型转换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)")
    }
}

我想创建一个可用于所有三个类的函数。

有什么想法吗?

1 个答案:

答案 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

“泛型”在这里真的不是你的意思吗?