swift - Swift 结构的替代继承方法?

标签 swift inheritance struct

我在我的 iOS 应用程序中使用结构而不是类来存储数据,因为值类型与引用类型相比具有明显的优势。但是,我正在尝试弄清楚如何构建类似内容的组。用户帖子可能包含图像、文本和/或标题。如果我使用类,我会使用的方法是使用一个通用的 Post 父类(super class),其中不同的子类代表不同类型的帖子。这样我就可以传递 Post 数据并根据需要进行转换。但是,结构不允许继承,那么我如何构建类似的东西呢?

最佳答案

在带有结构的 Swift 中,您可以为常见任务创建协议(protocol),还可以使用协议(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
    }
}

关于swift - Swift 结构的替代继承方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819953/

相关文章:

c - 指向结构的指针数组的动态分配

python - 如何创建一个可以接收 c++ 结构/实例或 python 对象作为参数的公共(public) cython 函数?

swift - 如何查找 healthkit 开始使用 Swift 接收输入的日期

swift - 从 ENUM 函数中调用外部类函数

ios - 自定义按钮view : detect touch down/up, 快速回退拖拽到UIScrollView

ruby-on-rails - 在继承模型之上添加其他字段并公开所有父类(super class)和子类字段

c++ - 继承C++

swift - 无法编译Swift的hello word程序

c# - 如何使 UserControls 的代码隐藏继承基类?

c++ - 未在范围内声明,即使在 .h 中声明