J'utilise des structures au lieu de classes pour stocker des données dans mon application iOS en raison de l'avantage évident des types valeur/référence. Cependant, j'essaie de comprendre comment créer des groupes de contenu similaire. Les publications des utilisateurs peuvent être constituées d'images, de texte et/ou de titres. Si j'utilisais des classes, l'approche que j'utiliserais est d'avoir une superclasse Post
commune avec différentes sous-classes représentant différents types de messages. De cette façon, je pouvais transmettre des données Post
et les diffuser selon les besoins. Cependant, les structures ne permettent pas l'héritage, alors comment pourrais-je concevoir quelque chose de similaire?
Dans Swift avec struct, vous pouvez créer protocol
pour la tâche courante et également implémenter l'implémentation par défaut en utilisant l'extension de protocole.
protocol Vehicle {
var model: String { get set }
var color: String { get set }
}
//Common Implementation using protocol extension
extension Vehicle {
static func parseVehicleFields(jsonDict: [String:Any]) -> (String, String) {
let model = jsonDict["model"] as! String
let color = jsonDict["color"] as! String
return (model, color)
}
}
struct Car : Vehicle {
var model:String
var color:String
let horsepower: Double
let license_plate: String
init(jsonDict: [String:Any]) {
(model, color) = Car.parseVehicleFields(jsonDict: jsonDict)
horsepower = jsonDict["horsepower"] as! Double
license_plate = jsonDict["license_plate"] as! String
}
}
struct Bicycle : Vehicle {
var model:String
var color:String
let chainrings: Int
let sprockets: Int
init(jsonDict: [String:Any]) {
(model, color) = Bicycle.parseVehicleFields(jsonDict: jsonDict)
chainrings = jsonDict["chainrings"] as! Int
sprockets = jsonDict["sprockets"] as! Int
}
}