结构和可重写的协议扩展
Protocol extension to struct and overwritable
我希望能够解码来自具有不同日期格式的服务器的不同对象,为此我想出了这个协议:
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
}
您需要在 DateFormatProtocol
中匹配 dateFormat
的声明,如下所示,
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
}
我希望能够解码来自具有不同日期格式的服务器的不同对象,为此我想出了这个协议:
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
}
您需要在 DateFormatProtocol
中匹配 dateFormat
的声明,如下所示,
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
}