gpt4 book ai didi

ios - 扩展符合 NSFetchRequestResult 的协议(protocol)

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:47 25 4
gpt4 key购买 nike

我正在将我的代码迁移到 Swift 3,但我遇到了一个我不能 100% 确定的问题。

自 WWDC 2016 起,Core Data 团队更新了他们的框架,使其对泛型更加友好,新的增强型 NSFetchRequest 现在返回符合 NSFetchRequestResult 的对象。

所以在下面的代码中,我的基本协议(protocol)符合上述 NSFetchRequestResult 协议(protocol),并且在其子协议(protocol) ManagedObjectFetchable 的扩展中,我想返回获取对象符合类型:

import CoreData

@objc protocol ManagedObjectType: class, NSFetchRequestResult { }

protocol ManagedObjectFetchable: ManagedObjectType { }

extension ManagedObjectFetchable {
static func preFetch(for predicate: Predicate, sortedBy sortDescriptors: [SortDescriptor]) throws -> [Self] {
let fetchRequest = NSFetchRequest<Self>(entityName: Self.entityName)
fetchRequest.predicate = predicate
fetchRequest.sortDescriptors = sortDescriptors

let dummyContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
return try dummyContext.fetch(fetchRequest)
}
}

这里的问题是这一行:

// Error: Binary operator '<' cannot be applied to operands of type 'NSFetchRequest<_>.Type' and 'Self.Type'
let fetchRequest = NSFetchRequest<Self>(entityName: Self.entityName)

这有点令人困惑,因为我认为这与二元运算符没有任何关系......在我得出非常简单的结论之前,我想知道是否有人遇到过类似的问题。


我可以使用泛型来解决这个问题:

extension ManagedObjectFetchable {
static func preFetch<T: ManagedObjectFetchable>(for predicate: Predicate, sortedBy sortDescriptors: [SortDescriptor]) throws -> [T] {
let fetchRequest = NSFetchRequest<T>(entityName: Self.entityName)
fetchRequest.predicate = predicate
fetchRequest.sortDescriptors = sortDescriptors

let dummyContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
return try dummyContext.fetch(fetchRequest)
}
}

这就是我现在要做的,但我不喜欢不理解为什么这行不通。如果有人能帮助解决这个问题,那就太棒了!

最佳答案

这是 Swift 中的一个错误。变化:

let fetchRequest = NSFetchRequest<Self>(entityName: Self.entityName)

到:

let fetchRequest: NSFetchRequest<Self> = NSFetchRequest(entityName: Self.entityName)

并且代码应该可以编译。

关于ios - 扩展符合 NSFetchRequestResult 的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38678318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com