Ios Swift-分拣表应立即更新视图

Ios Swift-分拣表应立即更新视图,ios,swift,Ios,Swift,我是Swift的新手,因此我愿意接受任何与我的代码相关的建议,因为我担心应用程序的效率 我的目的是在每次调用操作时更新视图。-我的ViewController中有一个TableView,我希望用户能够在单击时对表asc或desc进行排序 从理论上讲,代码可以工作,用户可以单击给定的按钮,该按钮会更改isAsc。但我无法在点击按钮后立即更新视图。到目前为止,它只在我离开ViewController并通过preformSegue从另一个ViewController回来时更新 let defa

我是Swift的新手,因此我愿意接受任何与我的代码相关的建议,因为我担心应用程序的效率

我的目的是在每次调用操作时更新视图。-我的ViewController中有一个TableView,我希望用户能够在单击时对表asc或desc进行排序

从理论上讲,代码可以工作,用户可以单击给定的按钮,该按钮会更改
isAsc
。但我无法在点击按钮后立即更新视图。到目前为止,它只在我离开ViewController并通过
preformSegue
从另一个ViewController回来时更新

    let defaults = UserDefaults.standard

    var isAsc = true

    var gefahreneKm: [String] = []
    var date: [String] = []
    var consumedLiters: [String] = []
    var pricePerLiter: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        isAsc = defaults.bool(forKey: "isAsc")
        gefahreneKm = createArray()
        date = createArrayDate()
        consumedLiters = createArrayConsumedL()
        pricePerLiter = createArrayPricePerLitre()
        self.toolbar.setBackgroundImage(UIImage(),
                                        forToolbarPosition: .any,
                                        barMetrics: .default)
        self.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
        timlineView.delegate = self
        timlineView.dataSource = self 
    }

    func createArray() -> [String] {
        let arrayDrivenKmString = arrayDrivenKm.map{ String($0) }

        if isAsc == true {
            return arrayDrivenKmString
        } else {
            return arrayDrivenKmString.reversed()
        }
    }

    func createArrayDate() -> [String] {
        if isAsc == true {
            return arrayDate
        } else {
            return arrayDate.reversed()
        }
    }

    func createArrayConsumedL() -> [String] {
        if isAsc == true {
            return arrayConsumedL
        } else {
            return arrayConsumedL.reversed()
        }
    }

    func createArrayPricePerLitre() -> [String] {
        if isAsc == true {
            return arrayPricePerLiter
        } else {
            return arrayPricePerLiter.reversed()
        }
    }

    @IBAction func buttonBack(_ sender: Any) {
        performSegue(withIdentifier: "goBackToMain", sender: self)
    }

    @IBAction func sortTable(_ sender: Any) {
        isAsc = !isAsc
        defaults.set(isAsc, forKey: "isAsc")
    }

您需要重新创建在排序和重新加载表之后需要更改的数据,以查看更改

func createData() {
  gefahreneKm = createArray()
  date = createArrayDate()
  consumedLiters = createArrayConsumedL()
  pricePerLiter = createArrayPricePerLitre()
}

override func viewDidLoad() {
   super.viewDidLoad()
   isAsc = defaults.bool(forKey: "isAsc")
   createData()
   // Rest of the code
} 

@IBAction func sortTable(_ sender: Any) {
   isAsc = !isAsc
   defaults.set(isAsc, forKey: "isAsc")
   createData()
   timlineView.reloadData()
}
两项建议:

  • 将函数从create*重命名为get*,因为它们不创建任何数据

  • 创建struct以管理数据模型


您需要重新创建排序和重新加载表后需要更改的数据,以查看更改

func createData() {
  gefahreneKm = createArray()
  date = createArrayDate()
  consumedLiters = createArrayConsumedL()
  pricePerLiter = createArrayPricePerLitre()
}

override func viewDidLoad() {
   super.viewDidLoad()
   isAsc = defaults.bool(forKey: "isAsc")
   createData()
   // Rest of the code
} 

@IBAction func sortTable(_ sender: Any) {
   isAsc = !isAsc
   defaults.set(isAsc, forKey: "isAsc")
   createData()
   timlineView.reloadData()
}
两项建议:

  • 将函数从create*重命名为get*,因为它们不创建任何数据

  • 创建struct以管理数据模型


@rmaddy它正在工作,谢谢你们!我将数组声明放在一个额外函数中,该函数现在在
viewDidLoad()
&
sortTable()
@rmaddy中都被调用。它正在工作,谢谢大家!我将数组声明放在一个额外函数中,该函数现在在
viewDidLoad()
sortTable()
中都被调用。