gpt4 book ai didi

Swift 泛型无法转换返回表达式

转载 作者:行者123 更新时间:2023-11-30 11:45:23 26 4
gpt4 key购买 nike

我有一个像这样的协议(protocol):

protocol Repository {
associatedtype Entity: EntityType

func getAll() throws -> [Entity]
}

以及符合存储库的泛型类型:

class AnyRepository<Entity:EntityType>: Repository {
public init<ConcreteRepository: Repository>(_ repository: ConcreteRepository) where ConcreteRepository.Entity == Entity {
...
}
}

我希望能够将实体名称映射到各自的存储库,如下所示

class Saver<Entity: EntityType> {

var repository: AnyRepository<Entity> {
if User.name == Entity.name {
return AnyRepository(UserRepository())
}
}

}

但是我收到错误“无法将“AnyRepository”类型(又名“AnyRepository”)的返回表达式转换为返回类型”

User是一个Entity类型,就像Saver类的泛型参数一样

有任何想法、任何帮助吗?提前致谢

最佳答案

这不能安全地工作,因为现在当你像这样调用函数时:

Saver<Car>().repository

你会得到一个AnyRepository<Car> ,但实际类型为 AnyRepository<User>所以每当你调用一些特定于 Car 的方法时它不会在 User 上找到它类并抛出错误,这就是不允许这样做的原因。

关于Swift 泛型无法转换返回表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889246/

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