有没有办法引用放在另一个类中的函数内的类?
简化,第一类看起来像这样:
class ClassOne: UITableViewController, NSFetchedResultsControllerDelegate {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
Client().fetchFunction(ClassOne)
}
func otherFunction(){
...
}
}
第二类看起来像这样:
public class ClassTwo: NSManagedObject, NSFetchedResultsControllerDelegate {
func fetchFunction(originClass: ???.Type){
originClass.otherFunction()
}
}
我解决问题的尝试不起作用,由" ???"放在上面。我输入的所有类型" ???"导致错误消息。
任何想法如何解决问题?我也试着关注Class as function parameter in Swift,但它似乎对我的情况不起作用。
答案 0 :(得分:2)
作为参数的类名不是一个好主意,至少在你的情况下不是这样,并且你可以通过更干净的方法获得类似的结果,而不会失去Swift的类型安全性。
您可以通过添加协议来更清楚地实现这一目标:
protocol MyProtocol() {
public func otherFunction()
}
可以在ClassTwo
中使用:
public class ClassTwo: NSManagedObject, NSFetchedResultsControllerDelegate {
func fetchFunction(obj: MyProtocol){
obj.otherFunction()
}
}
然后,您可以添加符合该协议的ClassOne
扩展名:
extension ClassOne: MyProtocol {
public func otherFunction() {
// do your magic
}
}
您可以将此技术应用于需要获取支持的所有类。
答案 1 :(得分:1)
您可以使用协议和通用功能的组合来执行您想要的操作。这样的事情应该有效:
protocol SomeProtocol {
static func myFunc()
}
class ClassOne: SomeProtocol {
class func myFunc() { print("Hello") }
}
class ClassTwo {
func test<T: SomeProtocol>(type: T.Type) {
T.myFunc()
}
}
ClassTwo().test(ClassOne.self) // Prints "Hello"
像其他一些回答者一样,我很难理解你要做的事情 - 我假设你试图调用一个类函数,否则就没有必要传递这个类型 - 你只会传递对象的实例。如果你真的想传递一个实例,那么修改代码如下:
protocol SomeProtocol {
func myFunc()
}
class ClassOne: SomeProtocol {
func myFunc() { print("Hello") }
}
class ClassTwo {
func test<T: SomeProtocol>(object: T) {
object.myFunc()
}
}
ClassTwo().test(ClassOne()) // Prints "Hello"