在collectionView函数之前运行Swift函数

时间:2017-08-15 13:34:02

标签: ios swift

我的swift代码中有这个功能

  func myFunc(){
     let jsonData2 = try JSONSerialization.jsonObject(with: data, options: []) as! [[String: Any]
     self.comments = jsonData2
  }

在collectionView' numberOfItemsInSection函数中我有这个

return comments.count

我需要的是首先运行myFunc然后运行所有其他collectionView的函数。我尝试将myFunc()放在viewDidLoad()的开头,但它没有& #39; t work。

4 个答案:

答案 0 :(得分:1)

尝试将其置于viewWillAppear(_:)方法中,并在reloadData()数组更改后调用comments

答案 1 :(得分:1)

您需要将comments数组定义为空,然后在viewWillAppear中加载相关数据

class YourViewController: UIViewController {
      var comments : [YourObjects] = []

     override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.myFunc()
      }

    func myFunc(){
         let jsonData2 = try JSONSerialization.jsonObject(with: data, options: []) as! [[String: Any]
         self.comments = jsonData2
         DispatchQueue.main.async{
          self.collectionView.reloadData() //reload data after
         }   
      }

}

希望这有帮助

答案 2 :(得分:1)

您应该使用重新加载数据来更新UICollectionView的内容

  func myFunc(){
     let jsonData2 = try JSONSerialization.jsonObject(with: data, options: []) as! [[String: Any]
     self.comments = jsonData2
     self.collectionView.reloadData()
  }

答案 3 :(得分:0)

确保在首次使用之前初始化comments的最简单方法是使用惰性属性:

lazy var comments: [String:Any] = self.myFunc()

func myFunc() -> [String:Any] {
    return try! JSONSerialization.jsonObject(with: Data()) as! [String:Any]
}