Fondamentalement, le problème est la partie RawRepresentable du code, je dois être en mesure d'obtenir la valeur de celui-ci, mais parce que j'ai besoin de convertir en un protocole, il ne me permet pas d'utiliser rawValue. Une solution de contournement pour cela?Passer au protocole et utiliser la valeur?
public protocol Serializable {
func dictionary() -> [String: Any]
}
extension Serializable {
func dictionary() -> [String: Any] {
var result = [String: Any]()
let mirror = Mirror(reflecting: self)
for child in mirror.children {
guard let label = child.label else { continue }
switch child.value {
case let serializable as Serializable:
result[label] = serializable.dictionary()
// Compile error here
case let rawRepresentable as RawRepresentable:
result[label] = rawRepresentable.rawValue
default:
result[label] = child.value
}
}
return result
}
}
Vous pourriez être en mesure d'ajouter une méthode d'extension sur RawRepresentable qui prend le dictionnaire comme inout et met rawValue en elle. – zneak