首页 > 解决方案 > 不同类型对象数组的 SwiftUI 抽象视图

问题描述

我想列出两种类型的对象(MotorBikeRow 和 WithFootBikeRow 将是此列表的这两个略有不同的行视图)

我来自 Java,自然会创建一个名为 Bike 的抽象类。这样我就有了两种(当然更多)类型的对象的列表:

@Binding var bikeList:[Bike]

但问题是如何在 Swift 中做这个“抽象类”?我目前正在使用一个名为 Bike 的协议,这两个结构 MotorBike 和 WithFootBike 符合。

List {
    ForEach(...) i in {
         if bikeList[i] is MotorBike {
              MotorBikeRow(motorBike: $bikeList[i]) << error
         } else {
              WithFootBikeRow(withFootBike: $bikeList[i]) << error
         }
    }
}

但是,如果这两个视图要求绑定,我们会立即看到进一步的问题。

@Binding var motorBike:MotorBike
@Binding var withFootBike:WithFootBike

所以这个问题

  1. 如何将绑定从 Bike 投射到 MorotBike/WithFootBike?当然,我确实使用了这个“技巧”:我如何在 Swift 中投射 @Binding但存在内存泄漏!

  2. 这是正确的 SwiftUI/Swift 方法吗?也许我完全错了并且受“Java”的影响太大以至于我没有看到更优雅的解决方案?

标签: swiftswiftuiswiftui-list

解决方案


推荐阅读