何时调用在Swift 4中对Array进行排序的函数?

时间:2018-05-08 07:56:52

标签: ios swift tableview

我创建了一个对Array进行排序并重新排序TableView的函数(我遵循了这个post)。我通过API填充数组。

何时或何地最好调用排序功能?当我从ViewDidLoad或ViewDidAppear调用它时,Array仍然是空的,所以没有任何反应。

func sort(){

    self.myArray = myArray.sorted(by: {$0.rank < $1.rank })
    self.tableView.reloadData()

}

5 个答案:

答案 0 :(得分:0)

ViewDidLoad 中调用您的函数,但不重新加载表视图数据

func sort(){
    self.myArray = myArray.sorted(by: {$0.rank < $1.rank })    
}

答案 1 :(得分:0)

这是tableView问题,检查你的委托,数据源和IB连接,只要数组不是= nil(确保那个),排序没有错误

答案 2 :(得分:0)

检查崩溃日志,此代码没有错误

答案 3 :(得分:0)

我不知道你使用的是什么,所以这可能没用,但你可以在顶部添加一个nil检查并初始化一个新的空数组(如果数组为nil)。

func sort(){
    if self.myArray == nil {
        self.myArray = [YourArrayType]()
    }
    self.myArray = myArray.sorted(by: {$0.rank < $1.rank })
    self.tableView.reloadData()

}  

您也可以声明数组可选(private var myArray: [Your ArrayType]?)或在声明(private var myArray = [YourArrayType]())时初始化它。第一个允许你使用?调用数组上的任何方法,如果数组为nil则不会执行,另一个确保数组不是nil而是为空。

答案 4 :(得分:0)

最后有效的是在创建数组并重新加载tableview之后调用排序函数。

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

func getData() {     

 Alamofire.request(apiURL).validate().responseJSON() { response in
            switch response.result {
            case .success:
                if let value = response.result.value {
                    let json = JSON(value)
                    let users = json.arrayValue
                    for item in users{
                        let temp = User(json: item)
                        self.myArray.append(temp)
                    }

                    self.tableView.reloadData()

                    self.sort()     //<---here

                }
            case .failure(let error):
                print(error)
            }
        }

func sort(){

    self.myArray = myArray.sorted(by: {$0.rank < $1.rank })
    self.tableView.reloadData()

}