协议扩展到struct和可重写

时间:2018-11-22 21:21:19

标签: swift properties static override protocols

我希望能够解码来自服务器的具有不同日期格式的不同对象,为此我想出了以下协议:

public protocol DateFormatProtocol{
    var dateFormat : String {get}
}

public protocol CodableWithDateFormat : Codable, DateFormatProtocol{
    static var dateFormat: String {get}// = "DatFormat"
}

public extension CodableWithDateFormat{
    public static var dateFormat: String { return "Base date format" }
}

因此,当我需要时,我可以覆盖每个需要不同日期格式的结构中的属性,但我不希望每个结构都覆盖协议扩展名中给出的默认日期格式。有什么办法可以写这个吗? :

struct Struct1 : CodableWithDateFormat{
    var dateFormat: String { return "Overwritten Date Format" }
    let prop1 : String
    let prop2 : Int
}

struct Struct2 : CodableWithDateFormat{ //Type 'Struct2' does not conform to protocol 'DateFormatProtocol'
    let prop1 : String
    let prop2 : Int
}

1 个答案:

答案 0 :(得分:1)

您需要按以下方式匹配dateFormatDateFormatProtocol的声明,

public protocol DateFormatProtocol {
    static var dateFormat: String { get }
}

public protocol CodableWithDateFormat: Codable, DateFormatProtocol {}

public extension CodableWithDateFormat {
    public static var dateFormat: String { return "Base date format" }
}

struct Struct1: CodableWithDateFormat {
    public static var dateFormat: String { return "Overwritten Date Format" }
    let prop1: String
    let prop2: Int
}

struct Struct2: CodableWithDateFormat {
    let prop1: String
    let prop2: Int
}