【发布时间】:2019-11-07 05:18:12
【问题描述】:
我发现 SwiftUI 的 ForEach(和 List)有一个奇怪的问题,如果您使用子类类型的数组,其中父类实现 BindableObject,ForEach 循环坚持每个项目都是基类类型而不是您正在使用的子类,请参阅下面的示例代码。一个小实验发现如果子类实现 BindableObject 然后问题就消失了,在我展示的示例中是可以的,但通常不是很合适。
任何人看到这个知道你应该如何处理这个,或者这可能是一个错误,我应该向 Apple 提出它?
class Bar: BindableObject {
let didChange = PassthroughSubject<Bar, Never>()
let name: String
init(name aName: String) {
name = aName
}
}
class Foo: Bar {
let value: Int
init(name aName: String, value aValue: Int) {
value = aValue
super.init(name:aName)
}
}
let arrayOfFoos: Array<Foo> = [ Foo(name:"Alpha",value:12), Foo(name:"Beta",value:13)]
struct ContentView : View {
var body: some View {
VStack {
ForEach(arrayOfFoos) { aFoo in
Text("\(aFoo.name) = \(aFoo.value)") // error aFoo is a Bar not a Foo
}
}
}
}
【问题讨论】:
标签: swift inheritance foreach swiftui