gpt4 book ai didi

swift - 如何在 Swift 中将继承应用于泛型

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

我有一个通用容器结构,它存储为实现如下协议(protocol)的类的容器:

protocol Protocol {}
class Class : Protocol {}
struct Container<Element> {
var value:Element
init(_ v:Element) { value = v }
}
class Example {
var container : Container<Class>
init() { container = Container(Class()) }
func getContainer() -> Container<Protocol> { return container }
}

但是,当我传递它时,我想将它作为协议(protocol)的容器传递,该协议(protocol)在返回容器上生成错误:

Cannot convert return expression of type 'Container<Class>' to return type 'Container<Protocol>'

我知道这应该是可能的,因为 Swift 使用数组来做到这一点,如下所示:

class ArrayExample {
var arrayContainer : [Class]
init() { arrayContainer = [Class()] }
func getArrayContainer() -> [Protocol] { return arrayContainer }
}

那么有没有人对如何实现容器有任何想法,以便转换/复制不会产生错误

最佳答案

尚不清楚您实际想要实现的目标,但这里是可编译的代码,涵盖了您迄今为止表达的所有目标:

protocol Protocol {}
class Class : Protocol {
var thing : AnyObject?
}
class Container<Element> {
var value:Element
init(_ v:Element) { value = v }
}
class Example {
var container : Container<Protocol>
init() { container = Container(Class()) }
func getContainer() -> Container<Protocol> { return container }
func doStuff() {
if let v = container.value as? Class { v.thing = "ha" }
}
}

关于swift - 如何在 Swift 中将继承应用于泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998030/

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