【问题标题】:Update a textView text when an object is added to an array without overriding the previous object's textView text将对象添加到数组时更新 textView 文本而不覆盖前一个对象的 textView 文本
【发布时间】:2019-09-23 19:36:29
【问题描述】:

每当将对象添加到数组时,我都会尝试更新文本视图,并在文本视图中显示该文本,如下所示:

"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
                }
        }

【问题讨论】:

    标签: ios arrays swift swift4.2


    【解决方案1】:

    在您的 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({$0.name}).joined(separator: "\n")
    }
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      func updateObjectData(objects: [ObjectData]) {
         var text: String = ""
         for object in objects {
              text += object.name + "\n"
         }
         self.yourTextView.text = text
      }
      

      【讨论】:

      • 这会在字符串末尾创建一个额外的换行符。 (对于 OP 来说可能是也可能不是问题)
      • 是的,他可以检查最后一个索引,或者使用 'map' 和 'joined' 运算符
      【解决方案3】:

      您正在为循环中的对象分配 name 属性。您需要将属性连接到单个变量中并分配整个文本。

      func updateObjectData(objects: [ObjectData]) {
          let text = objects.map { $0.name }.joined(separator: "\n")
          ObjectTextView.text = text
      }
      

      【讨论】:

        【解决方案4】:

        快速浏览一下,每次运行此循环时,您都会覆盖 textView.text:

        for objectData in object {
            self.ObjectTextView.text = objectData.name
        }
        

        最简单的选择可能是创建一个 var 并附加到它,然后将其设置为 textview 的文本,或者在对象数组上使用 .map 和 .joined。

        1) 将以上内容更新为:

        var string = ""
        for objectData in object {
            objectStrings += objectData.name + "\n"
        }
        self.ObjectTextView.text = string
        

        这样做的缺点是你会在最后得到额外的换行符,如果需要,可以很容易地清理它。

        2) 将以上内容更新为:

        self.ObjectTextView.text = object.map{$0.name}.joined(separator: "\n")
        

        这是一个 swifty 选项,它首先创建一个 objectNames 数组,然后将它们与提供的分隔符连接起来。

        【讨论】:

          猜你喜欢
          • 2022-01-20
          • 2014-04-17
          • 2021-07-16
          • 1970-01-01
          • 2016-05-08
          • 1970-01-01
          • 2018-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多