我创建了一个对Array进行排序并重新排序TableView的函数(我遵循了这个post)。我通过API填充数组。
何时或何地最好调用排序功能?当我从ViewDidLoad或ViewDidAppear调用它时,Array仍然是空的,所以没有任何反应。
func sort(){
self.myArray = myArray.sorted(by: {$0.rank < $1.rank })
self.tableView.reloadData()
}
答案 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()
}