У меня есть общий Container структуру, которая хранится в контейнере класса, который реализует протокол, как показано ниже:Как применять наследование для дженериков в Swift
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' как вар контейнера: контейнер '? –
matt
Я могу объявить контейнер контейнером, но внутри класса я хочу получить доступ к переменной/функциям, которые не находятся в протоколе –
И вы не можете отказаться от этого класса, чтобы получить доступ к этим переменным/функциям? – matt