美文网首页
Swift 获取字典的键(Key)和值(Value)

Swift 获取字典的键(Key)和值(Value)

作者: Yuency | 来源:发表于2018-01-03 11:24 被阅读115次

    点击表格的 cell 做控制器跳转, 控制器的名字和一些其他信息存在字典里, 比如字典的 Key 是控制器的名字, 对应的 Value 是页面的标题, 这时候该怎么做呢.

    import UIKit
    /// cell 重用标示
    private let cellid = "MainViewController_CELL_ID"
    
    class MainViewController: UIViewController {
    
        //MARK: - 属性组
        var tableView: UITableView!
    
        //MARK: - 在这里添加控制器的名字和列表要显示的名字
        let listArray = [
            ["AViewController": "A 页面"],
            ["BViewController": "B 页面"],
            ["CViewController": "C 页面"],
            ]
    
    
        //MARK: - 生命周期
        override func viewDidLoad() {
            super.viewDidLoad()
        
            //设置页面
            setUpView()
        }
    
    
        /// 设置页面
        private func setUpView() {        
            tableView = UITableView(frame: UIScreen.main.bounds)
            tableView.dataSource = self
            tableView.delegate = self
            view.addSubview(tableView)
            //注册 cell 重用的正确姿势
            tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellid)
        }
    }
    
    
    // MARK: - 实现表格的协议方法
    extension MainViewController: UITableViewDelegate, UITableViewDataSource {
    
        //MARK: 数据源
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return listArray.count
        }
    
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath)
        
            //使用字典的值作为标题 取字典 Value
            cell.textLabel?.text = "\(indexPath.row + 1) \(Array(listArray[indexPath.row].values)[0])"
            cell.textLabel?.textColor = UIColor(red:0.25, green:0.25, blue:0.25, alpha:1.00)
            return cell
        }
    
        //MARK: 事件
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
            //因为字典的 key 就是将要 push 进来的控制器的名字 取字典 Key
            let vcName = Array(listArray[indexPath.row].keys)[0]
        
            //把这个 key 转换成为类 需要加上命名空间前缀,否则不生效
            if let cls = NSClassFromString(Bundle.main.nameSpaceStirng + "." + vcName) as? UIViewController.Type {
                let vc = cls.init()
                navigationController?.pushViewController(vc, animated: true)
            }
        }
    }
    
    // MARK: - Bunle 扩展
    extension Bundle {
    
        /// 获取命名空间
        var nameSpaceStirng: String {
            return infoDictionary?["CFBundleName"] as? String ?? ""
        }
    }
    

    相关文章

      网友评论

          本文标题:Swift 获取字典的键(Key)和值(Value)

          本文链接:https://www.haomeiwen.com/subject/ufaamxtx.html