代码之家  ›  专栏  ›  技术社区  ›  Abhinav Khanduja

“else”语句在执行时未在“didselectrowat”函数中运行

  •  0
  • Abhinav Khanduja  · 技术社区  · 7 年前

    不知道它是否常见,但在“didselectrowat”函数中,“if”语句执行得很好,但“else”语句没有,每当我点击单元格时,下面的checked属性始终为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)
        }
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   rmaddy    7 年前

    Item struct class

    didSelectRowAt selItem items

    if/else

    items[indexPath.row] = selfItem
    

    reloadData

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