gpt4 book ai didi

swift - 无法从通用结构调用通用函数

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:39 24 4
gpt4 key购买 nike

尝试在扩展中创建一个会调用另一个通用函数的函数时遇到问题。我创建了一个非常简单的示例来显示问题:

protocol Target {}
enum api {
case user
}
extension api: Target {}
protocol Mappable {}

struct User {}
extension User: Mappable {}

struct Provider<A: Target> {

}
extension Provider {

func requestObject<T: Mappable>(_ token: A, type: T.Type){
//some code
}

func getUser() {

requestObject(api.user, type: User.self)
//This code creates Error: Cannot invoke 'requestObject' with an argument list of type '(api, type: User.Type)'
}

}

谁能帮忙解释一下如何创建函数 getUser() 并调用 requestObject。我知道一种解决方案是使 struct Provider 成为非泛型,但它会限制 Provider,因此它不是真正的解决方案。

感谢帮助

最佳答案

问题是,通过在没有任何类型约束的情况下扩展通用 Provider 类型并像您那样声明 getUser 函数,编译器只能推断 的类型>AApi,比A:Target 限制性更强。您需要使用条件一致性让编译器知道特定的 getUser 实现应该只存在于专门用于 api 类型的 Provider 类型。

extension Provider where A == Api {
func getUser() {
requestObject(Api.user, type: User.self)
}
}

您还应该符合 Swift 命名约定,即类型的 upperCamelCase,因此将 api 更改为 Api

关于swift - 无法从通用结构调用通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480379/

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