Swift结构的继承替代方法?

时间:2018-02-16 04:10:24

标签: swift inheritance struct

我使用结构而不是类来在我的iOS应用程序中存储数据,因为值与引用类型的明显优势。但是,我正在试图弄清楚如何构建类似内容的组。用户帖子可能包含图像,文本和/或标题。如果我使用类,我将使用的方法是使用一个公共Post超类,其中不同的子类代表不同类型的帖子。这样我就可以传递Post数据并根据需要进行投射。但是,结构不允许继承,所以我怎样才能构建类似的东西?

2 个答案:

答案 0 :(得分:23)

在Swift with struct中,您可以为常见任务创建protocol,并使用协议扩展实现默认实现。

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

答案 1 :(得分:0)

在下面的Gist中,有所有可能的方法都有详细的答案。我不喜欢他们中的任何一个,因为我是班级的粉丝。但是结构是Swift的未来,您必须了解,采用和喜欢:( it。

链接: https://gist.github.com/AliSoftware/9e4946c8b6038572d678