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

2018-01-03  本文已影响115人  Yuency

点击表格的 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 ?? ""
    }
}
上一篇下一篇

猜你喜欢

热点阅读