gpt4 book ai didi

swift - 无法推断通用参数 'Entity'

转载 作者:行者123 更新时间:2023-11-30 11:35:00 25 4
gpt4 key购买 nike

我不确定为什么 Swift 无法推断出我作为参数显式传入的类型。

在下面的获取管理器上,当我尝试加载“Entity”类型的对象时,出现错误。

generic parameter 'Entity' could not be inferred

class EventsViewController: UIViewController {
private let fetchManager = FetchManager()
override func viewDidLoad() {
super.viewDidLoad()
fetchManager.willPerformQuery = {}
// generic parameter 'Entity' could not be inferred
fetchManager.loadObjects(ofType: Event) { (outcome) in
switch outcome {
case .success(let events):
print("Entities: \(events.count)")
case .failure(let code):
switch code {
case .connectionUnavailable:
print("1")
case .notAuthenticated:
print("2")
case .retry:
print("3")
case .serviceUnavailable:
print("4")
case .unknown:
print("5")
}
}
}
}
}

class FetchManager {
private let database: ReadableDatabase = CloudKitDatabase()
var willPerformQuery: () -> Void = {}
func loadObjects<Entity: Queryable & CloudKitInitable>(ofType type: Entity, withCompletion completion: @escaping (FetchOutcome<Entity>) -> Void) {
database.loadObjects(matching: Entity.query, willPerformQuery: { [weak self] (_) in
self?.willPerformQuery()
}, didPerformQuery: { (outcome) in
switch outcome {
case .success(let files):
let entities: [Entity] = files.compactMap(Entity.init)
completion(FetchOutcome<Entity>.success(entities))
case .failure(let code):
completion(FetchOutcome<Entity>.failure(code))
}
})
}
}

最佳答案

引用类型本身(访问其“元类型”)的语法是TypeName.self。在这种情况下,您将使用 Event.self:

fetchManager.loadObjects(ofType: Event.self) { (outcome) in 
^~~~~

方法签名还应该使用 Entity.Type 进行更新,以便编译器可以知道它需要类型 information 而不是类型 instance :

func loadObjects<Entity: Queryable & CloudKitInitable>(ofType type: Entity.Type, ...) {
...
}

关于swift - 无法推断通用参数 'Entity',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854186/

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