有没有办法在使用 Swift 5 完成功能后重新加载视图控制器?

问题描述

我在视图控制器中使用以下语法(使用故事板)来删除数据库中数组的第二个元素。

@IBAction func deleteItemOne(_ sender: UIButton) {

if userId == user?.uid {
                        
  let group_array = document["product"] as? [String] ?? [""]
                        
    if  (group_array.count) > 1 {
            
      document.reference.updateData([
          "product": FieldValue.arrayRemove([group_array[1]])
      ])
                            self.viewDidLoad()
                            self.viewWillAppear(true)
         }
     }
}

删除数组元素后,我将使用以下语法重新加载视图控制器

self.viewDidLoad() 
self.viewWillAppear(true) 

然而,在移除元素后,视图控制器不会按预期重新加载,实际上它最终什么也没做。

这引出了我的问题,是否有一个简单的 Swift 函数/方法可以在完成后调用以重新加载视图控制器?

解决方法

您不应该直接调用 viewDidLoad 或 viewWillAppear。系统调用这些方法(并且 viewDidLoad 在视图控制器的生命周期内仅被调用一次。)

您应该将代码分解为具有 displayContents() 方法(或类似方法)。当您需要显示内容时调用该方法,无论是最初还是内容更改时。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...