gpt4 book ai didi

swift - 返回通用协议(protocol) swift 的特殊类型的方法

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

我有一个通用协议(protocol),它有一个返回通用参数的方法。该协议(protocol)有两种实现,它们都将字符串作为返回类型。我想要一种方法来基于某些参数构建类似于类集群的特定实例。该方法限制了泛型类型,但尝试返回时出现错误:

“无法将 StringReturn 类型的返回表达式转换为返回类型 T”

protocol GenericProtocol {

typealias ReturnType

func doSomething() -> ReturnType

}

struct StringReturn : GenericProtocol {

func doSomething() -> String {
return "first"
}

}

struct AnotherStringReturn : GenericProtocol {

func doSomething() -> String {
return "another"
}

}

func build<T : GenericProtocol where T.ReturnType == String>(param: String) -> T {

if .. {
return StringReturn()
} else {
return AnotherStringReturn
}

}

最佳答案

您想要实现的是使用泛型函数通过 Swift 的类型约束创建对象的实例。

注意 Apple 文档中的一般语法:

func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) {
// function body goes here
}

在您的函数中,不可能在函数执行时推断出 T 是什么类型,因为您没有将其作为参数传递给函数,因此您无法说出什么类型是输出。

如果您想使用具有类型约束的通用函数,您可以在协议(protocol)中添加一些 init 并使用如下函数:

func build<T : GenericProtocol where T.ReturnType == String>(object: T.Type, param: String) -> T {
// Your code here
return T.init()
}

let str = build(StringReturn.self, param: "name")

希望对你有帮助!

关于swift - 返回通用协议(protocol) swift 的特殊类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34287562/

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