gpt4 book ai didi

ios - 执行时“else”语句未在 'didSelectRowAt' 函数中运行

转载 作者:行者123 更新时间:2023-11-30 11:25:38 25 4
gpt4 key购买 nike

不知道它是否常见,但在“didSelectRowAt”函数中,“if”语句完美执行,但“else”语句则不然,每当我点击单元格时,检查的属性始终为 true,如下所示可能有帮助的代码:-

这是代码:-

import UIKit
import Alamofire
import SwiftyJSON

class TableViewController: UITableViewController {

var vCData = [Item]()

let url = "https://api.coinmarketcap.com/v1/ticker/"
var items = [Item]()

override func viewDidLoad() {
super.viewDidLoad()
getCoinData(url: url)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)

let arrayItem = items[indexPath.row]

cell.textLabel?.text = arrayItem.name
cell.detailTextLabel?.text = arrayItem.symbol

if arrayItem.checked == true{cell.accessoryType = .checkmark}
else{cell.accessoryType = .none}

return cell
}

这就是问题发生的地方:-

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

tableView.deselectRow(at: indexPath, animated: true)

var selItem = items[indexPath.row]

if selItem.checked == false {

selItem.checked = true

vCData.append(selItem)

}else { // statement not working

selItem.checked = false

if let index : Int = self.vCData.index(where: {$0.name == selItem.name && $0.checked == selItem.checked && $0.buyPrice == selItem.buyPrice && $0.rank == selItem.rank && $0.symbol == selItem.symbol}) {

self.vCData.remove(at: index)
print(vCData,"\n")
}
}
tableView.reloadData()
}

@IBAction func doneTapped(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
}

}

最佳答案

假设 Item 是一个 struct 而不是 class,您的问题是由于 struct > 是一种值类型,当您从一个变量分配给另一个变量时,就会生成副本。

didSelectRowAt中,您更新了selItem,但这不会更改存储在items中的副本。

修复方法很简单。在 if/else 之后,使用新的 selItem 更新 items:

items[indexPath.row] = selfItem

在一个不相关的注释中,我会将 didSelectRowAtreloadData 的使用替换为:

tableView.reloadRows(at: [ indexPath ], with: .fade)

无需重新加载整个表即可更新一行。

关于ios - 执行时“else”语句未在 'didSelectRowAt' 函数中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com