【问题标题】:How to pass a class type as a function parameter in Swift?如何在 Swift 中将类类型作为函数参数传递?
【发布时间】:2019-07-03 03:57:43
【问题描述】:

下面的代码我该怎么做?

    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”

【问题讨论】:

  • 你真正想做什么?
  • 让 fetchRequest = NSFetchRequest(entityName: "XXX")

标签: swift xcode generics nsfetchedresultscontroller nsmanagedobject


【解决方案1】:

使用泛型

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多