首页 > 解决方案 > 如何在 Swift 中将类类型作为函数参数传递?

问题描述

我该怎么做以下代码?

    func setupFetchResultController<AnyNSManagedObject>(entityToFetch: AnyNSManagedObject) {
    let fetchRequest:NSFetchRequest<entityToFetch> = entityToFetch.fetchRequest()
}


它会产生带有错误消息的错误:

使用未声明的类型“entityToFetch”


当我尝试以下代码时

    func setupFetchResultController<AnyNSManagedObject>(entityToFetch: AnyNSManagedObject) {
    let fetchRequest:NSFetchRequest<AnyNSManagedObject> = AnyNSManagedObject.fetchRequest()
}


它还产生了带有错误消息的错误:

类型“AnyNSManagedObject”不符合协议“NSFetchRequestResult”

标签: swiftxcodegenericsnsfetchedresultscontrollernsmanagedobject

解决方案


使用泛型

func setupFetchResultController<T: NSManagedObject>(entityToFetch: T) {
    let fetchRequest = T.fetchRequest()        
}

或者

func setupFetchResultController<T: NSManagedObject>(entityToFetch: T) {
    let fetchRequest: NSFetchRequest<NSFetchRequestResult> = T.fetchRequest()
}

推荐阅读