【发布时间】:2020-12-01 14:25:42
【问题描述】:
我目前正在开发一款适用于 iOS 的消息应用程序,以提高我的 Swift 技能,但我遇到了一个奇怪的问题。我将两个人之间的所有消息保存在一个名为“messages”的数组中。数据将从 FireBase 数据库中获取,但目前(我仍在实际布置页面),它们只是保存在设备上的数组中。顺便说一句,我已经声明了一个名为TextMessage 的类。它只保留text: String 和isSender: Bool 的值。无论如何,我声明我的数组如下:
var messages: [TextMessage] = []
我有一个按钮,点击时会调用didPressSendButton:sendButton.addTarget(self, action: #selector(didPressSendButton), for: .touchUpInside)
该函数定义如下:
@objc func didPressSendButton() {
guard let messageText = textField.text else {
return
}
if messageText == "" {
return
}
let newMessage: TextMessage = TextMessage.zero
newMessage.text = messageText
newMessage.isSender = true
messages.append(newMessage)
messageTable.reloadData()
scrollToBottom()
updateUI()
textField.text = ""
}
但由于某种原因,append 方法更改了数组中的 所有 元素。因此,如果我先发送一条带有文本“Hi”的消息,然后再发送一条消息“Hey”,那么第一个消息就会改变。我已经打印了数组的值,果然,它包含两条消息,文本为“Hey”,而不是 1 条“Hi”和 1 条“Hey”。这可能是什么原因?
【问题讨论】:
-
什么是
TextMessage.zero?我怀疑这是一个存储属性,它每次都返回相同的TextMessage实例,而您正在一遍又一遍地修改它。