Swift 结构扩展仅提供数据,我无法更改数据



我有一个类似的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
}
}

最新更新