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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//
//  SMBCommonPicker.swift
//  DHBaseModule
//
//  Created by imou on 2020/4/7.
//  Copyright © 2020 jm. All rights reserved.
//
 
import UIKit
 
public enum SMBPickViewType: String {
    case scale
    case postion
    case category
}
 
public class SMBCommonPicker: SMBPickView {
    var _type: SMBPickViewType?
   public var type: SMBPickViewType {
        get {
            return _type ?? .scale
        }
        set {
            _type = newValue
            pickView.reloadAllComponents()
        }
    }
 
    lazy var scales: Array<String> = {
        let scales = ["0-9", "10-49", "50-99", "100-499", "500-1999", "2000及以上"]
        return scales
    }()
 
    lazy var positions: Array<String> = {
        let positions = ["负责人", "管理层", "人事", "行政", "IT", "财务", "员工", "其他"]
        return positions
    }()
    
    lazy var categorys: Array<Dictionary<String,Any>> = {
        let categorys = allCategory()
        return categorys as! [Dictionary<String, Any>]
    }()
    
    var selectCategory:String!
    
    override public func numberOfComponents(in pickerView: UIPickerView) -> Int {
        if type == .category {
            return 2
        }
        return 1
    }
 
    override public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        switch type {
        case .scale:
            return scales.count
        case .postion:
            return positions.count
        case .category:
            if component == 0 {
                return categorys.count
            }else{
                if component == 0 {
                    return categorys.count
                }else{
                    return findSubFor(name: selectCategory).count
                }
                
            }
        }
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        switch type {
        case .scale:
            return scales[row]
        case .postion:
            return positions[row]
        case .category:
            if component == 0 {
                return categorys[row]["name"] as? String
            }else{
                return findSubFor(name: selectCategory)[row]["name"] as? String
            }
        }
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        switch type {
        case .scale:
            if (selectblock != nil) {
                selectblock(scales[row])
            }
        case .postion:
            if (selectblock != nil) {
                selectblock(positions[row])
            }
        case .category: break
//            if component == 0 {
//                sel
//            }else{
//                return findSubFor(name: selectCategory)[row]["name"] as? String
//            }
        }
    }
 
    func allCategory() -> Array<Any> {
        let path = Bundle.main.path(forResource: "job", ofType: "json")
        let url = URL(fileURLWithPath: path!)
        // 带throws的方法需要抛异常
        do {
            let data = try Data(contentsOf: url)
            let jsonData: Any = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)
            let jsonArr = jsonData as! NSArray
            return jsonArr as! Array<Any>
        } catch let error as Error? {
            print("读取本地数据出现错误!", error ?? nil!)
            return []
        }
    }
 
    func findSubFor(name:String) -> Array<Dictionary<String,Any>> {
        for item in categorys {
            if (item["name"] as! String) == name {
                return (item["children"] as! Array)
            }
        }
        return []
    }
}