【问题标题】:Why it print out an empty array instead of the array appended with values for the first time in viewDidLoad()?为什么它打印出一个空数组而不是第一次在 viewDidLoad() 中附加值的数组?
【发布时间】:2020-09-19 15:28:50
【问题描述】:

我想在 viewDidLoad() 中添加一个带有数据库值的数组,以便在加载视图后提取一个值并将其分配给 UILabel.text。

代码:

var tagArr = [Tag]()

  

          override func viewDidLoad() {
                super.viewDidLoad()
        
        let AA = fetchTagPool()
        print(AA)
        
                
            }

 

   func fetchTagPool() -> [Tag]{
      
        API.Tag.observeTagPool {(tag) in
            self.tagArr.append(tag)
            print(self.tagArr)
        }

        return self.tagArr
    }

print(AA) 的结果是一个空数组,如 []print(self.tagArr) 的结果是预期的数组,附加了数据库中的值。

如何修复代码以使 print(AA)print(self.tagArr) 一样工作?

非常感谢

【问题讨论】:

    标签: ios arrays swift viewdidload


    【解决方案1】:

    API.Tag.observeTagPool 的调用是异步的,它将在fetchTagPool() 返回空的self.tagArr 后完成。

    您需要更改fetchTagPool 以通过callback 函数返回值,如下所示:

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Note: This will print AA after viewDidLoad finishes
        // Use trailing closure syntax to pass the trailing closure
        // as "callback".  Then fetchTagPool calls "callback", this
        // closure will receive the value as AA and print it and
        // update the UILabel
        fetchTagPool() { AA in
            print(AA)
    
            // Use value to update a label
            myLabel.text = AA[0].name
        }
    
        print("This will print first")
    }
    
    func fetchTagPool(callback: ([Tag]) -> Void) {
          
        API.Tag.observeTagPool { tag in
            self.tagArr.append(tag)
            print(self.tagArr)
            callback(self.tagArr)
        }
    
    }
    
    

    如果您的 API.Tag.observeTagPool 在后台队列上运行并且没有返回到主队列以返回其值,那么您应该在更新属性中的值之前移动到主队列,如下所示:

    func fetchTagPool(callback: ([Tag]) -> Void) {
          
        API.Tag.observeTagPool { tag in
            DispatchQueue.main.async {
                self.tagArr.append(tag)
                print(self.tagArr)
                callback(self.tagArr)
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多