Проблема заключается в том, что структура соответствует протоколу (назовем ее PA) и Decodable, но PA накладывает свойство с типом, который не является Decodable. Пример:
protocol PA {
var b: [PB]? { get }
}
protocol PB {}
struct SA: PA, Decodable {
let b: [PB]? // SA's conformance to Decodable wants this to be [Decodable], but PA's conformance imposes [PB]
}
struct SB: PB, Decodable {}
приведенный выше код отказывается компилироваться, с:
- ошибка: тип «SA» не соответствует протоколу «Decodable»
- примечание : не может автоматически синтезировать 'Decodable', потому что '[PB]?' не соответствует 'Decodable'
Изменение этой строки на:
let b: [PB & Decodable]?
тоже не работает и дает:
- error: type ' SA 'не соответствует протоколу' PA '
- примечание: кандидат имеет несовпадающий тип' [Decodable & PB]? '
- ошибка: тип' SA 'не соответствует протоколу' Decodable '
- Примечание: не может автоматически синтезировать' Decodable ', потому что' [Decodable & PB]? ' не соответствует 'Decodable'
- примечание: протокол требует свойства 'b' с типом '[PB]?'; вы хотите добавить заглушку?
Обратите внимание, что 4-я строка бессмысленна: «'[Decodable & PB]?' не соответствует «Decodable» ». Подождите, что?
Есть предложения?