如何在Swift 4中按列值对UITableView进行排序?

Aug*_*sto 1 sorting uitableview ios swift

我有一个应用程序来显示比特币价格的价值.当我点击列的标题时,我想要排序.

在此输入图像描述

我正在尝试这样做,点击已被响应,但没有任何反应,列继续没有排序.

struct info {
        let name: String
        let coin: String
        let change: Double
        let price: Double
    }

var ticker: Array<info> = []

@objc func tapChangeFunction(sender: UITapGestureRecognizer) {
        self.ticker.sorted(by: {
            $0.change > $1.change
        })

        DispatchQueue.main.async {
            self.table.reloadData()
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mil*_*sáľ 5

您似乎忘记将已排序的数据分配回模型:

self.ticker = self.ticker.sorted(by: {
    $0.change > $1.change
})
Run Code Online (Sandbox Code Playgroud)

sorted(by:)返回一个已排序的新数组,旧的数组未被修改,请阅读文档:

返回集合的元素,使用给定的谓词作为元素之间的比较进行排序.

或者使用变异版本sort(by:)(docs):

使用给定的谓词作为元素之间的比较,对集合进行排序.

self.ticker.sort(by: {
    $0.change > $1.change
})
Run Code Online (Sandbox Code Playgroud)

边注:

您不必reloadData异步调度,您已经在主线程上.