Я пытаюсь создать структуру класса, которая имеет один класс с общим типом (с ограничением типа), который используется как ограничение общего типа для другого универсального класса. Как только я попытаюсь подклассифицировать класс ограничения первого типа, этот подкласс более не может быть использован для запуска второго родового класса (но отлично работает для первого). Вот упрощенный пример кода:Инициализация неисправностей Вложенные генераторы
class DataClass {
var value: Int
required init(value: Int) {
self.value = value
}
}
class Thing: DataClass {
required init(value: Int) {
super.init(value: value)
}
}
class ThingWrapper<ThingDataType: Thing>: DataClass {
var thing: ThingDataType
required init(value: Int) {
thing = ThingDataType(value: value)
super.init(value: value)
}
}
class ThingWrapperList<ThingWrapperType: ThingWrapper<Thing>>: DataClass {
var things: [ThingWrapperType]
required init(value: Int) {
things = [ThingWrapperType]()
super.init(value: value)
}
}
Они работают отлично:
var thingWrapper = ThingWrapper<Thing>(value: 42)
var thingWrapperList = ThingWrapperList<ThingWrapper<Thing>>(value: 42)
Как делает это:
class NewThing: Thing {
required init(value: Int) {
super.init(value: value)
}
}
var newThingWrapper = ThingWrapper<NewThing>(value: 42)
Но это порождает ошибку:
var newThingWrapperList = ThingWrapperList<ThingWrapper<NewThing>>(value: 42)
Error: 'ThingWrapperList' requires that 'ThingWrapper<NewThing>' inherit from 'ThingWrapper<Thing>'
So не могу ли я использовать подкласс внутреннего t ype generic constraint? Возможно, я смогу решить это, избавившись от класса ThingWrapper, но я пытался подражать моему JSON-формату, и теперь мне в основном любопытно, что я делаю неправильно.
Я думаю, что вы пришли из java;) - меньше наследования - может быть, больше протоколов. – muescha
, но почему бы не просто простые структуры? – muescha
у вас есть образец вашего json-формата, где вам нужны эти дженерики? – muescha