将对象添加到数组时更新 textView 文本而不覆盖前一个对象的 textView 文本
Update a textView text when an object is added to an array without overriding the previous object's textView text
每当将对象添加到数组并在文本视图中显示该文本时,我都会尝试更新文本视图,如下所示:
"object 1"
"object 2"
问题是每次将新对象添加到数组时,它都会覆盖之前的对象,因此只会显示:
"object 2"
这是我正在使用的代码,我不完全确定如何附加文本以便在添加新项目后显示数组中的所有项目,而不是只显示最后添加的项目。
struct ObjectData {
let name: String
let type: String
let code: Int
}
var updatedObjectArray = [ObjectData]() { didSet {
self.updateObjectData(object: self.updatedObjectArray)
}
func updateObjectData(object: [ObjectData]) {
for objectData in object {
self.ObjectTextView.text = objectData.name
}
}
你可以简单地这样做:
func updateObjectData(objects: [ObjectData]) {
var text: String = ""
for object in objects {
text += object.name + "\n"
}
self.yourTextView.text = text
}
在您的 for 循环中,您在每次迭代中将文本设置为新值,从而删除上次迭代的更改。您可以将您的名字附加到一个新字符串,然后在 for 循环的末尾设置文本,如下所示:
func updateObjectData(object: [ObjectData]) {
var objectStrings = ""
for objectData in object {
objectStrings += objectData.name + "\n"
}
self.ObjectTextView.text = objectStrings
}
或者通过将 ObjectData 映射到它的名称并加入换行符来实现没有结束换行符的更快捷的方式:
func updateObjectData(object: [ObjectData]) {
self.ObjectTextView.text = object.map({[=11=].name}).joined(separator: "\n")
}
您正在循环中分配 name
属性 个对象。您需要将属性连接到单个变量中并分配整个文本。
func updateObjectData(objects: [ObjectData]) {
let text = objects.map { [=10=].name }.joined(separator: "\n")
ObjectTextView.text = text
}
快速浏览一下,每次循环 运行:
时,您都会覆盖 textView.text
for objectData in object {
self.ObjectTextView.text = objectData.name
}
最简单的选择可能是创建一个 var 并附加到它,然后将其设置为文本视图的文本,或者在对象数组上使用 .map 和 .joined。
1) 将以上内容更新为:
var string = ""
for objectData in object {
objectStrings += objectData.name + "\n"
}
self.ObjectTextView.text = string
这样做的缺点是最后会有额外的换行符,如果需要可以很容易地清理掉。
2) 将以上内容更新为:
self.ObjectTextView.text = object.map{[=12=].name}.joined(separator: "\n")
这是 swifty 选项,它首先创建一个 objectNames 数组,然后使用提供的分隔符将它们连接起来。
每当将对象添加到数组并在文本视图中显示该文本时,我都会尝试更新文本视图,如下所示:
"object 1"
"object 2"
问题是每次将新对象添加到数组时,它都会覆盖之前的对象,因此只会显示:
"object 2"
这是我正在使用的代码,我不完全确定如何附加文本以便在添加新项目后显示数组中的所有项目,而不是只显示最后添加的项目。
struct ObjectData {
let name: String
let type: String
let code: Int
}
var updatedObjectArray = [ObjectData]() { didSet {
self.updateObjectData(object: self.updatedObjectArray)
}
func updateObjectData(object: [ObjectData]) {
for objectData in object {
self.ObjectTextView.text = objectData.name
}
}
你可以简单地这样做:
func updateObjectData(objects: [ObjectData]) {
var text: String = ""
for object in objects {
text += object.name + "\n"
}
self.yourTextView.text = text
}
在您的 for 循环中,您在每次迭代中将文本设置为新值,从而删除上次迭代的更改。您可以将您的名字附加到一个新字符串,然后在 for 循环的末尾设置文本,如下所示:
func updateObjectData(object: [ObjectData]) {
var objectStrings = ""
for objectData in object {
objectStrings += objectData.name + "\n"
}
self.ObjectTextView.text = objectStrings
}
或者通过将 ObjectData 映射到它的名称并加入换行符来实现没有结束换行符的更快捷的方式:
func updateObjectData(object: [ObjectData]) {
self.ObjectTextView.text = object.map({[=11=].name}).joined(separator: "\n")
}
您正在循环中分配 name
属性 个对象。您需要将属性连接到单个变量中并分配整个文本。
func updateObjectData(objects: [ObjectData]) {
let text = objects.map { [=10=].name }.joined(separator: "\n")
ObjectTextView.text = text
}
快速浏览一下,每次循环 运行:
时,您都会覆盖 textView.textfor objectData in object {
self.ObjectTextView.text = objectData.name
}
最简单的选择可能是创建一个 var 并附加到它,然后将其设置为文本视图的文本,或者在对象数组上使用 .map 和 .joined。
1) 将以上内容更新为:
var string = ""
for objectData in object {
objectStrings += objectData.name + "\n"
}
self.ObjectTextView.text = string
这样做的缺点是最后会有额外的换行符,如果需要可以很容易地清理掉。
2) 将以上内容更新为:
self.ObjectTextView.text = object.map{[=12=].name}.joined(separator: "\n")
这是 swifty 选项,它首先创建一个 objectNames 数组,然后使用提供的分隔符将它们连接起来。