我有一个通用的Container结构,它存储为实现如下协议的类的容器:
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 }
}
然而,当我通过它时,我想将它作为仅在return container
生成错误的协议的容器传递:
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 }
}
所以有人对如何实现Container有任何想法,以便转换/复制不会产生错误
答案 0 :(得分:0)
目前还不清楚你实际想要完成什么,但这里的代码编译并涵盖到目前为止你所表达的所有目标:
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" }
}
}