У меня возникли проблемы с согласованием двух протоколов вместе с использованием протокола Codable.
Насколько я понимаю, даже если я использовал пользовательский объект, если этот объект успешно соответствует Codable, то любая ссылка на объект, которая также может соответствовать.
У меня есть следующий код, и я не понимаю, почему я получаю ошибки:
import UIKit
import Foundation
protocol PromotionProtocol: Codable {
var promotionType: Int? { get }
var promotionCode: String? { get }
var fileName: String? { get }
var facetDescription: String? { get }
var promoDescription: String? { get }
}
class Promotion: PromotionProtocol {
var promotionType: Int?
var promotionCode: String?
var fileName: String?
var facetDescription: String?
var promoDescription: String?
}
protocol PromotionInfoProtocol: Codable {
var cornerPromotion: PromotionProtocol? { get }
var mainPromotion: PromotionProtocol? { get }
var isTopFive: Bool? { get }
}
class PromoInfo: PromotionInfoProtocol {
var cornerPromotion: PromotionProtocol?
var mainPromotion: PromotionProtocol?
var isTopFive: Bool?
}
Все внутри «PromotionProtocol» является либо строкой, либо целым числом, так что все в порядке. Но я получаю ошибки, что продвижение класса не соответствует Encodable и Decodable.
Promotion
соответствуетCodable
–PromoInfo
, но не соответствует.PromotionProtocol
не является типом, соответствующимCodable
, так как протоколы не всегда соответствуют сами себе (только подумайте: какой конкретный тип должен быть создан при декодированииcornerPromotion
иmainPromotion
?). Сравните stackoverflow.com/q/44441223/2976878 - person Hamish   schedule 10.10.2017