Cannot assign to property: 'messages' is a get-only property
时间: 2023-12-10 22:17:21 浏览: 33
这个错误是因为 `messages` 是一个只读的计算属性,不能直接进行赋值操作。如果你想要修改这个属性的值,需要将它改为一个可读写的变量。
如果你希望在 `ChatView` 中改变 `messages` 的值,可以考虑将它定义为一个 `@State` 变量。这样就可以在视图中对它进行修改了。下面是一个简单的示例代码:
```
struct ChatView: View {
@ObservedObject var friend: Friend
@Environment(\.managedObjectContext) var viewContext
@FetchRequest(entity: ChatMessage.entity(), sortDescriptors: [], predicate: NSPredicate(format: "fromFriend == %@", argumentArray: [friend]))
var fetchedMessages: FetchedResults<ChatMessage>
@State var messages: [ChatMessage] = [] // 将 messages 定义为一个 @State 变量
var body: some View {
VStack {
// 显示消息列表
// 显示文本框和发送按钮
}
.onAppear {
// 将 fetchedMessages 赋值给 messages
messages = fetchedMessages.map { $0 }
}
.onDisappear {
// 将 messages 保存到 Core Data
friend.chatHistory = NSSet(array: messages)
do {
try viewContext.save()
} catch {
// 处理保存错误
}
}
}
}
```
在上面的代码中,我们将 `messages` 定义为一个 `@State` 变量,并在 `onAppear` 方法中将 `fetchedMessages` 赋值给它。这样就可以在视图中修改 `messages` 的值了。注意,在 `onDisappear` 方法中,我们将 `messages` 保存到 Core Data,以便下次打开应用时可以恢复聊天历史记录。