【发布时间】:2021-01-31 09:31:03
【问题描述】:
我有以下结构:
struct Communication: Identifiable {
let id: String
let message, title: String
let date: Date
var isExpanded: Bool = false
}
问题是当我尝试更改isExpanded 的值时,我得到了错误:
不能对不可变值使用变异成员:'communication' 是一个'let' 常量
我正在尝试在SwiftUI 中的List() 中使用它
在 Swift 中,这类问题的正确解决方案是什么?
我使用 DatabaseService 类来获取结果:
class DatabaseService : ObservableObject {
@Published var communications = [Communication]()
funct getCommunications() -> Void {
//...Add items to communications
}
然后在我看来
struct MainView: View {
@ObservedObject var databaseService = DatabaseService()
var body: some View {
List(databaseService.communications) { communication in
VStack(alignment: .leading) {
Text(communication.title)
.bold()
.font(.title3)
Text(communication.message)
.padding(.bottom, 24)
.lineLimit(communication.isExpanded ? nil : 5)
.overlay(
GeometryReader { proxy in
Button(action: {
communication.isExpanded.toggle()
}) {
Text(communication.isExpanded ? "Mai puțin" : "Mai mult")
.font(.caption).bold()
.padding(.leading, 8.0)
.padding(.top, 8.0)
}
.frame(width: proxy.size.width, height: proxy.size.height, alignment: .bottomTrailing)
}
)
}
}
.onAppear(perform: {
self.databaseService.getComunicate()
})
}
【问题讨论】:
-
我认为这是因为您正在创建一个
Communication变量,即let。在您的代码中搜索let communication并将其更改为var communication。它与结构本身无关 -
@אוריorihpt 它是 swiftui 中的一个列表,该变量是列表中的迭代。
-
这取决于您如何在 SwiftUI 视图中定义它。您会显示相关视图吗?
-
@Asperi 我已经改变了问题。