【问题标题】:Append Array Through If Statement通过 if 语句追加数组
【发布时间】:2019-10-16 03:04:44
【问题描述】:

所以,我正在制作一个需要选择各种东西的应用程序。您可以通过滑动到 UITableView 的右侧来选择这些。我正在使用 UIContextualAction 并且正在使用 switch 语句来排序函数和可执行语句。选择 UITableView 单元后,它将运行我的一个 switch 语句。这是从 indexPath.row 选择的。现在,一旦选择了每个对象,它就会将名称附加到一个数组中。

我的问题:添加对象后,数组不会添加。例如,我选择 Snapchat。该数组中有“Snapchat”。如果我也选择 Instagram,则数组应附加“Instagram”。确实如此,但它也忘记了其中的“Snapchat”,当它打印时,它只打印 1 个选定的对象。 (这是我最后选择的)

如何创建一个可以添加更多对象而又不会忘记的数组

我已经研究过在选定的 tableview 单元格上执行 if 语句。没有任何效果,想知道如何解决此问题或找到解决方案

var array = [String]()
var choice = indexPath.row
switch choice {
case 0:
    array.append("Instagram")
    print(array)
case 1:
    array.append("Snapchat")
    print(array)
case 2:
    array.append("VSCO")
    print(array)
default:
    print("Error")
    print(array)

当我选择多个并尝试附加数组时,这是我得到的。

["Instagram"]
["Snapchat"]
["VSCO"]
Error

如你所见,它们不是数组形式。

【问题讨论】:

  • 你必须在这个函数中声明数组。
  • 您每次都在创建一个空字符串数组。将数组放在外面,只在里面进行追加。显示更多上下文。

标签: arrays swift append indexpath


【解决方案1】:

这就是你所做的

func someFunc() {
    var array = [String]()
    var choice = indexPath.row
    switch choice {
    case 0:
         array.append("Instagram")
         print(array)
    case 1:
         array.append("Snapchat")
         print(array)
    case 2:
         array.append("VSCO")
         print(array)
    default:
         print("Error")
         print(array)
}

您已在将对象添加到数组的函数中声明了要附加到的数组。 发生的情况是每次您添加某些内容时,它都会覆盖您刚刚输入的对象。

  1. 函数创建数组
  2. 将对象添加到数组中
  3. 函数结束

  4. 函数创建数组(覆盖旧数组)

  5. 将对象添加到数组中(现在仅在数组中的单个对象)
  6. 函数结束

只需将您的数组var array = [String]() 移出函数即可。

 var array = [String]()

 override func viewDidLoad() {
      super.viewDidLoad()
 }

    func someFunc() {

        var choice = indexPath.row
        switch choice {
        case 0:
             self.array.append("Instagram")
             print(array)
        case 1:
             self.array.append("Snapchat")
             print(array)
        case 2:
             self.array.append("VSCO")
             print(array)
        default:
             print("Error")
             print(array)
    }

另外,在命名数组“数组”时要小心,最好给数组起一个更有意义的名称

【讨论】:

  • 太棒了!谢谢
【解决方案2】:

它确实添加了,但是你的var array = [String]() 是一个上下文变量,一旦函数结束它就会得到deinit,这是你的结构:

--> Controller
   --> Function
       --> Array

var array = [String]() 放在控制器上而不是函数上,如下所示:

--> Controller
   --> Array
   --> Function

除了数组声明位置外,无需更改任何内容。


注意:您正在以数组形式打印它们,但长度 == 1。

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 2019-07-09
    • 1970-01-01
    • 2015-07-08
    • 2012-05-20
    • 1970-01-01
    • 2018-10-14
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多