我有一个类似的swift结构
struct WidgetView: Identifiable, Hashable{
static func == (lhs: WidgetView, rhs: WidgetView) -> Bool {
return lhs.id == rhs.id && lhs.friendlyName == rhs.friendlyName && lhs.order == rhs.order && lhs.selected == rhs.selected
}
let id = UUID()
var friendlyName: String
var view: Any
var order: Int
var selected: Bool = false
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
extension WidgetView {
static var data: [WidgetView] {
[
WidgetView(friendlyName: "News", view: MusicView(), order: 1),
WidgetView(friendlyName: "Music", view: MusicView(), order: 2),
WidgetView(friendlyName: "Ambiance", view: AmbianceView(), order: 3),
WidgetView(friendlyName: "Weather", view: WeatherView(), order: 4),
WidgetView(friendlyName: "Routines", view: MusicView(), order: 5)
]
}
}
我一直试图通过以下两个函数编辑WidgetView扩展数据:
func resetSelected() {
for i in 0..<WidgetView.data.count {
WidgetView.data[i].selected = false
}
}
func onSelectedLoad() {
var widgets = [WidgetView]()
var ambianceWidget = widgets.firstIndex(where: { $0.friendlyName == "Ambiance"})
WidgetView.data[ambianceWidget!].selected = false
}
然而,这两个功能具有相同的
无法分配给属性:"data"是只获取属性
我希望能够更改扩展中的数据,特别是";选择";,以及";订单";零件。我一直在环顾四周,似乎不明白为什么我的代码显示为";仅获取"如有任何帮助,我们将不胜感激。
尝试这个
extension WidgetView {
static var data: [WidgetView] = // <--- here
[
WidgetView(friendlyName: "News", view: MusicView(), order: 1),
WidgetView(friendlyName: "Music", view: MusicView(), order: 2),
WidgetView(friendlyName: "Ambiance", view: AmbianceView(), order: 3),
WidgetView(friendlyName: "Weather", view: WeatherView(), order: 4),
WidgetView(friendlyName: "Routines", view: MusicView(), order: 5)
]
}
注意,尽管";onSelectedLoad";没有道理,你应该避免使用";,改为使用这个:
func onSelectedLoad() {
let widgets = [WidgetView]() // an empty array
// try to find something in an empty array ???
let ambianceWidget = widgets.firstIndex(where: { $0.friendlyName == "Ambiance"})
if let ambianceWidget = ambianceWidget {
WidgetView.data[ambianceWidget].selected = false
}
}