Alternate approach to inheritance for Swift structs?

前端 未结 2 2157
悲哀的现实
悲哀的现实 2021-02-12 13:21

I\'m using structs instead of classes to store data in my iOS app because of the obvious advantage of value vs reference types. However, I\'m trying to figure out how to archite

2条回答
  •  情歌与酒
    2021-02-12 14:03

    In Swift with struct you can create protocol for common task and also implement default implementation using protocol extension.

    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
        }
    }
    

提交回复
热议问题