JLChen
2021-10-08 f8457b624a75bf8e41489b74f66009eee6891b8b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//
//  SMBLocalPickView.swift
//  DHBaseModule
//
//  Created by imou on 2020/4/6.
//  Copyright © 2020 jm. All rights reserved.
//
 
import Categories
import UIKit
 
class SMBLocalPickView: SMBPickView, UIPickerViewDataSource, UIPickerViewDelegate {
    var localArray: Array<Dictionary<String, Any>>!
    typealias SMBLocalPickViewResultBlock = (_ province: String, _ city: String, _ area: String) -> Void
    var result: SMBLocalPickViewResultBlock!
    var province: String!
    var city: String!
    var area: String!
 
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 3
    }
 
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if component == 0 {
            // 省
            return allProvince().count
        }
        if component == 1 {
            // 市
        }
        if component == 2 {
            // 区
        }
        return 0
    }
 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if component == 0 {
            // 省
            pickerView.reloadComponent(1)
            pickerView.reloadComponent(2)
        }
        if component == 1 {
            // 市
            pickerView.reloadComponent(2)
        }
        if component == 2 {
            // 区
        }
    }
 
//    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
//        if component == 0 {
//            // 省
//            return allProvince()[row]
//        }
//        if component == 1 {
//            // 市
//            pickerView.reloadComponent(2)
//        }
//        if component == 2 {
//            // 区
//        }
//    }
 
    func getPick(result: @escaping SMBLocalPickViewResultBlock) {
        self.result = result
        pickView.delegate = self
        pickView.dataSource = self
    }
 
    func allProvince() -> Array<String> {
        let provinces = NSMutableArray()
        for item in localArray {
            let name = item["name"] as! String
            provinces.add(name)
        }
        return provinces as! Array<String>
    }
 
//    func cityForProvince(province: String) -> Array<String> {
//        var city = NSMutableArray()
//        for item in localArray {
//            let name = item["name"] as! String
//            if name==province {
//                for cityTemp in item["name"] {
//                    let name = item["name"] as! String
//                    provinces.add(name)
//                }
//            }
//        }
//        return city as! Array<String>
//    }
 
    func getLocalJsonObject() {
        let path = Bundle.main.path(forResource: "local", ofType: "json")
        let url = URL(fileURLWithPath: path!)
        // 带throws的方法需要抛异常
        do {
            /*
             * try 和 try! 的区别
             * try 发生异常会跳到catch代码中
             * try! 发生异常程序会直接crash
             */
            let data = try Data(contentsOf: url)
            let jsonData: Any = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)
            localArray = jsonData as? Array<Dictionary<String, Any>>
 
        } catch _ as Error? {
        }
    }
}