, T - , . , - ( ). InnerParser T, T , InnerParser.
, , :
struct AnotherParser: JSONParserType {
typealias Element = Item
}
, . , , :
let parser = OuterParser<AnotherParser>()
generic AnotherParser, InnerParser ( AnotherParser). , .
, :
struct OuterParser<T: JSONParserType where T.Element == Item>: JSONParserType {
typealias Element = Item
let innerParser: T
init() {
self.innerParser = InnerParser()
}
init(innerParser: T) {
self.innerParser = innerParser
}
}
, T , InnerParser. , downcast T - , .
, . , factory OuterParser.
enum Parser {
static func createParser() -> OuterParser<InnerParser> {
return OuterParser(innerParser:InnerParser())
}
static func createParser<T>(innerParser:T) -> OuterParser<T> {
return OuterParser(innerParser:innerParser)
}
}
let innerParser = Parser.createParser()
let anotherParser = Parser.createParser(AnotherParser())
, .
Swifty, , , , .