考慮下面的代碼:通用約束類型默認值
protocol JSONParserType {
associatedtype Element
}
// MARK: - Entities
struct Item {}
// MARK: - Parsers
struct OuterParser<T: JSONParserType where T.Element == Item>: JSONParserType {
typealias Element = Item
let innerParser: T
init(innerParser: T = InnerParser()) {
self.innerParser = innerParser
}
}
struct InnerParser: JSONParserType {
typealias Element = Item
}
的OuterParser
有一個孩子解析器應該被限制在一個特定的類型。不幸的是,在初始化器(或者在屬性定義本身)中提供一個默認值會導致編譯器拋出一個類型爲'InnerParser'的默認參數值無法轉換爲'T'類型。
如果我刪除默認值賦值,並且只是實例化OuterParser
明確提供InnerParser
,一切都很好。
let outerParser = OuterParser(innerParser: InnerParser())
我的問題是什麼,該方法提供實際滿足約束不起作用的默認值的原因。
感謝您的解釋。這對我來說至少是一個棘手的問題。 – mAu
@mAu高興地幫助:) – Hamish