天天看點

Swift版國内省市縣三級關聯

1、引入資料模型 CountryCityModel.swift

如下檔案為省市縣最新資料Model,使用的struct 結構體處理,比類的記憶體占用更小:

import Foundation

/**
 * 國家、省份、城市資料模型
 */
struct CountryCityModel {
    
    //MARK: - proterty
    /** 目前國家 */
    static var current_country = "中國"
    /** 目前省份 */
    static var current_province = "請選擇"
    /** 目前市 */
    static var current_city = "請選擇"
    /** 目前縣 */
    static var current_county = "請選擇"
    
    ///
    //定義數組,存儲省份資訊
    ///
    private static let china = ["直轄市", "特别行政區", "浙江", "江蘇", "廣東", "福建", "湖南", "湖北", "遼甯",
    "吉林", "黑龍江", "河北", "河南", "山東", "陝西", "甘肅", "新疆", "青海", "山西", "四川",
    "貴州", "安徽", "江西", "雲南", "内蒙古", "西藏", "廣西", "甯夏", "海南", "台灣"]
    
    
    ///
    //定義數組,存儲市級資訊
    ///
    private static let zhixiashi = ["北京", "上海", "天津", "重慶"]
    private static let jiangsu = ["南京", "無錫", "常州", "徐州", "蘇州", "南通", "連雲港", "淮安", "揚州", "鹽城", "鎮江", "泰州", "宿遷"]
    private static let zhejiang = ["杭州", "甯波", "溫州", "嘉興", "湖州", "紹興", "金華", "衢州", "舟山", "台州", "利水"]
    private static let guangdong = ["廣州", "韶關", "深圳", "珠海", "汕頭", "佛山", "江門", "湛江", "茂名", "肇慶", "惠州", "梅州", "汕尾", "河源", "陽江", "清遠", "東莞", "中山", "潮州", "揭陽"]
    private static let fujiang = ["福州", "廈門", "莆田", "三明", "泉州", "漳州", "南平", "龍岩", "甯德"]
    private static let hunan = ["長沙", "株洲", "湘潭", "衡陽", "邵陽", "嶽陽", "常德", "張家界", "益陽", "郴州", "永州", "懷化", "婁底", "湘西土家苗族自治區"]
    private static let hubei = ["武漢", "襄陽", "黃石", "十堰", "宜昌", "鄂州", "荊門", "孝感", "荊州", "黃岡", "鹹甯", "随州", "恩施土家族苗族自治州"]
    private static let liaoning = ["沈陽", "大連", "鞍山", "撫順", "本溪", "丹東", "錦州", "營口", "阜新", "遼陽", "盤錦", "鐵嶺", "朝陽", "葫蘆島"]
    private static let jilin = ["長春", "吉林", "四平", "遼源", "通化", "白山", "松原", "白城", "延邊北韓族自治區"]
    private static let heilongjiang = ["哈爾濱", "齊齊哈爾", "雞西", "牡丹江", "佳木斯", "大慶", "伊春", "黑河", "大興安嶺","鶴崗","雙鴨山","七台河","綏化"]
    private static let hebei = ["石家莊", "保定", "唐山", "邯鄲", "承德", "廊坊", "衡水", "秦皇島", "張家口","邢台","滄州"]
    private static let henan = ["鄭州", "洛陽", "商丘", "安陽", "南陽", "開封", "平頂山", "焦作", "新鄉", "鶴壁", "許昌", "漯河", "三門峽", "信陽", "周口", "駐馬店","濟源" ,"濮陽"]
    private static let shandong = ["濟南", "青島", "菏澤", "淄博", "棗莊", "東營", "煙台", "濰坊", "濟甯", "泰安", "威海", "日照", "濱州", "德州", "聊城", "臨沂","萊蕪"]
    private static let shangxi = ["西安", "寶雞", "鹹陽", "渭南", "銅川", "延安", "榆林", "漢中", "安康", "商洛"]
    private static let gansu = ["蘭州", "嘉峪關", "金昌", "金川", "白銀", "天水", "武威", "張掖", "酒泉", "平涼", "慶陽", "定西", "隴南", "臨夏", "合作"]
    private static let qinghai = ["西甯", "海東地區", "海北藏族自治州", "黃南藏族自治州", "海南藏族自治州", "果洛藏族自治州", "玉樹藏族自治州", "海西蒙古族藏族自治州"]
    private static let xinjiang = ["烏魯木齊", "奎屯", "石河子", "昌吉", "吐魯番", "庫爾勒", "阿克蘇", "喀什", "伊甯", "克拉瑪依", "塔城", "哈密", "和田", "阿勒泰", "阿圖什", "博樂"]
    private static let shanxi = ["太原", "大同", "陽泉", "長治", "晉城", "朔州", "晉中", "運城", "忻州", "臨汾", "呂梁"]
    private static let sichuan = ["成都", "自貢", "攀枝花", "泸州", "德陽", "綿陽", "廣元", "遂甯", "内江", "樂山", "南充", "眉山", "宜賓", "廣安", "達州", "雅安", "巴中", "資陽", "阿壩藏族羌族自治州", "甘孜藏族自治州", "涼山彜族自治州"]
    private static let guizhou = ["貴陽", "六盤水", "遵義", "安順", "黔南布依族苗族自治州", "黔西南布依族苗族自治州", "黔東南苗族侗族自治州", "銅仁", "畢節"]
    private static let anhui = ["合肥", "蕪湖", "安慶", "馬鞍山", "阜陽", "六安", "滁州", "宿州", "蚌埠", "淮南", "宣城", "亳州", "淮北", "銅陵", "黃山", "池州"]
    private static let jiangxi = ["南昌", "九江", "景德鎮", "萍鄉", "新餘", "鷹潭", "贛州", "宜春", "上饒", "吉安", "撫州"]
    private static let yunnan = ["昆明", "曲靖", "玉溪", "保山", "昭通", "麗江", "普洱", "臨滄", "楚雄彜族自治州", "大理白族自治州", "紅河哈尼族彜族自治州", "文山壯族苗族自治州", "西雙版納傣族自治州", "德宏傣族景頗族自治州", "怒江傈僳族自治州", "迪慶藏族自治州"]
    private static let neimenggu = ["呼和浩特", "標頭", "烏海", "赤峰", "通遼", "鄂爾多斯", "呼倫貝爾", "巴彥淖爾", "烏蘭察布","興安盟","錫林郭勒盟","阿拉善盟"]
    private static let guangxi = ["南甯", "柳州", "桂林", "梧州", "北海", "防城港", "欽州", "貴港", "玉林", "百色", "賀州", "河池", "崇左","來賓"]
    private static let xizang = ["拉薩", "昌都地區", "林芝地區", "山南地區", "日喀則地區", "那曲地區", "阿裡地區"]
    private static let ningxia = ["銀川", "石嘴山", "吳忠", "固原", "中衛"]
    private static let hainan = ["海口", "三亞"]
    private static let taiwan = ["台北", "高雄", "基隆", "台中", "台南", "新竹", "嘉義"]
    private static let tebiexingzhengqu = ["香港", "澳門"]
    
    
    ///
    //定義數組,存儲縣資訊
    ///
    private static let beijing = ["東城區", "西城區", "海澱區", "朝陽區", "豐台區", "石景山區", "通州區", "順義區", "房山區", "大興區", "昌平區", "懷柔區", "平谷區", "門頭溝區", "延慶縣", "密雲縣"]
    private static let shanghai = ["浦東新區", "徐彙區", "長甯區", "普陀區", "閘北區", "虹口區", "楊浦區", "黃浦區", "盧灣區", "靜安區", "寶山區", "闵行區", "嘉定區", "金山區", "松江區", "青浦區", "南彙區", "奉賢區", "崇明縣"]
    private static let tianjing = ["河東", "南開", "河西", "河北", "和平", "紅橋", "東麗", "津南", "西青", "北辰", "塘沽", "漢沽", "大港", "薊縣", "寶坻", "甯河", "靜海", "武清"]
    private static let chongqing = ["渝中區", "大渡口區", "江北區", "沙坪壩區", "九龍坡區", "南岸區", "北碚區", "萬盛區", "雙橋區", "渝北區", "巴南區", "萬州區", "涪陵區", "黔江區", "長壽區", "江津區", "合川區", "永川區", "南川區"]
    private static let aomeng = ["澳門半島", "氹仔島", "路環島"]
    private static let xianggang = ["中西區", "灣仔區", "東區", "南區", "九龍城區", "油尖旺區", "觀塘區", "黃大仙區", "深水埗區", "北區", "大埔區", "沙田區", "西貢區", "元朗區", "屯門區", "荃灣區", "葵青區", "離島區"]
    
    //MARK: - class method
    /** 國家 */
    static var Country:[String] {
        get {
            return ["請選擇","中國"];
        }
    }
    
    /**
     * 省份
     * @return [String]
     */
    static var Province:[String] {
        get {
            
            switch current_country {
            case "中國":
                return china;
            default:
                return ["請選擇"];
            }
        }
    }
    
    /**
     * 城市
     * @return [String]
     */
    static var City:[String] {
        get{
            switch current_province {
            case "直轄市":return zhixiashi;
            case "浙江":return zhejiang;
            case "江蘇":return jiangsu;
            case "廣東":return guangdong;
            case "福建":return fujiang;
            case "湖南":return hunan;
            case "湖北":return hubei;
            case "遼甯":return liaoning;
            case "吉林":return jilin;
            case "黑龍江":return heilongjiang;
            case "河北":return hebei;
            case "河南":return henan;
            case "山東":return shandong;
            case "陝西":return shangxi;
            case "甘肅":return gansu;
            case "新疆":return xinjiang;
            case "青海":return qinghai;
            case "山西":return shanxi;
            case "四川":return sichuan;
            case "貴州":return guizhou;
            case "安徽":return anhui;
            case "江西":return jiangxi;
            case "雲南":return yunnan;
            case "内蒙古":return neimenggu;
            case "西藏":return xizang;
            case "廣西":return guangxi;
            case "甯夏":return ningxia;
            case "海南":return hainan;
            case "特别行政區":return tebiexingzhengqu;
            case "台灣":return taiwan;
            default:
                current_province = "直轄市";
                current_city = "北京";
                return beijing;
            }
        }
    }
    
    /**
     * 縣
     * @return [String]
     */
    static var County:[String] {
        
        get{
            switch(current_city){
            case "天津":return tianjing;
            case "上海":return shanghai;
            case "重慶":return chongqing;
            case "澳門":return aomeng;
            case "香港":return xianggang;
            /** 江蘇 */
            case "南京":return ["玄武區","白下區","秦淮區","建邺區","鼓樓區","下關區","浦口區","栖霞區","雨花台區","江甯區","六合區","溧水縣","高淳縣"];
            case "無錫":return ["崇安區","南長區","北塘區","錫山區","惠山區","濱湖區","江陰市","宜興市"];
            case "徐州":return ["鼓樓區","雲龍區","賈汪區","泉山區","銅山區","豐縣","沛縣","睢甯縣","新沂市","邳州市"];
            case "常州":return ["天甯區","鐘樓區","戚墅堰區","新北區","武進區","溧陽市","金壇市"];
            case "蘇州":return ["滄浪區","平江區","金阊區","虎丘區","吳中區","相城區","常熟市" ,"張家港市" ,"昆山市","吳江市","太倉市"];
            case "南通":return ["崇川區","港閘區","通州區","海安縣","如東縣","啟東市","如臯市","海門市"];
            case "連雲港":return ["連雲區","新浦區","海州區","贛榆縣","東海縣","灌雲縣","灌南縣"];
            case "淮安":return ["清河區","楚州區","淮陰區","清浦區","漣水縣","洪澤縣","盱眙縣","金湖縣"];
            case "鹽城":return ["亭湖區","鹽都區","響水縣","濱海縣","阜甯縣","射陽縣","建湖縣","東台市","大豐市"];
            case "揚州":return ["廣陵區","邗江區","江都區","寶應縣","儀征市","高郵市"];
            case "鎮江":return ["京口區","潤州區","丹徒區","丹陽市","揚中市","句容市"];
            case "泰州":return ["海陵區","高港區","興化市","靖江市","泰興市","姜堰市"];
            case "宿遷":return ["宿城區","宿豫區","沭陽縣","泗陽縣","泗洪縣"];
            /** 浙江 */
            case "杭州":return ["上城區","下城區","江幹區","拱墅區","西湖區","濱江區","蕭山區","餘杭區","桐廬縣","淳安縣","建德市","富陽市","臨安市"]
            case "甯波":return ["海曙區","江東區","江北區","北侖區","鎮海區","鄞州區","象山縣","甯海縣","餘姚市","慈溪市","奉化市"]
            case "溫州":return ["鹿城區","龍灣區","瓯海區","洞頭縣","永嘉縣","平陽縣","蒼南縣","文成縣","泰順縣","瑞安市","樂清市"]
            case "嘉興":return ["南湖區","秀洲區","嘉善縣","海鹽縣","海甯市","平湖市","桐鄉市"]
            case "湖州":return ["吳興區","南浔區","德清縣","長興縣","安吉縣"]
            case "紹興":return ["越城區","紹興縣","新昌縣","諸暨市","上虞市","嵊州市"]
            case "金華":return ["婺城區","金東區","武義縣","浦江縣","磐安縣","蘭溪市","義烏市","東陽市","永康市"]
            case "衢州":return ["柯城區","衢江區","常山縣","開化縣","龍遊縣","江山市"]
            case "舟山":return ["定海區","普陀區","岱山縣","嵊泗縣"]
            case "台州":return ["椒江區","黃岩區","路橋區","玉環縣","三門縣","天台縣","仙居縣","溫嶺市","臨海市"]
            case "利水":return ["蓮都區","青田縣","缙雲縣","遂昌縣","松陽縣","雲和縣","慶元縣","景甯畲族自治縣","龍泉市" ]
            /** 廣東 */
            case "廣州":return ["荔灣區","越秀區","海珠區","天河區","白雲區","黃埔區","番禺區","花都區","南沙區","蘿崗區","增城市","從化市"]
            case "韶關":return ["武江區","浈江區","曲江區","始興縣","仁化縣","翁源縣","乳源瑤族自治縣","新豐縣","樂昌市","南雄市"]
            case "深圳":return ["羅湖區","福田區","南山區","寶安區","龍崗區","鹽田區"]
            case "珠海":return ["香洲區","鬥門區","金灣區"]
            case "汕頭":return ["龍湖區","金平區","濠江區","潮陽區","潮南區","澄海區","南澳縣"]
            case "佛山":return ["禅城區","南海區","順德區","三水區","高明區"]
            case "江門":return ["蓬江區","江海區","新會區","台山市","開平市","鶴山市","恩平市"]
            case "湛江":return ["赤坎區","霞山區","坡頭區","麻章區","遂溪縣","徐聞縣","廉江市","雷州市","吳川市"]
            case "茂名":return ["茂南區","茂港區","電白縣","高州市","化州市","信宜市"]
            case "肇慶":return ["端州區","鼎湖區","廣甯縣","懷集縣","封開縣","德慶縣","高要市","四會市"]
            case "惠州":return ["惠城區","惠陽區","博羅縣","惠東縣","龍門縣"]
            case "梅州":return ["梅江區","梅縣","大埔縣","豐順縣","五華縣","平遠縣","蕉嶺縣","興甯市"]
            case "汕尾":return ["城區","海豐縣","陸河縣","陸豐市"]
            case "河源":return ["源城區","紫金縣","龍川縣","連平縣","和平縣","東源縣"]
            case "陽江":return ["江城區","陽西縣","陽東縣","陽春市"]
            case "清遠":return ["清城區","佛岡縣","陽山縣","連山壯族瑤族自治縣","連南瑤族自治縣","清新縣","英德市","連州市"]
            case "東莞":return [""]
            case "中山":return [""]
            case "潮州":return ["湘橋區","潮安縣","饒平縣"]
            case "揭陽":return ["榕城區","揭東縣","揭西縣","惠來縣"]
            /** 福建 */
            case "福州":return ["鼓樓區","台江區","倉山區","馬尾區","晉安區","閩侯縣","連江縣","羅源縣","閩清縣","永泰縣","平潭縣","福清市","長樂市"]
            case "廈門":return ["思明區","海滄區","湖裡區","集美區","同安區","翔安區"]
            case "莆田":return ["城廂區","涵江區","荔城區","秀嶼區","仙遊縣"]
            case "三明":return ["梅列區","三元區","明溪縣","清流縣","甯化縣","大田縣","尤溪縣","沙縣","将樂縣","泰甯縣","建甯縣","永安市"]
            case "泉州":return ["鯉城區","豐澤區","洛江區","泉港區","惠安縣","安溪縣","永春縣","德化縣","金門縣","石獅市","晉江市","南安市"]
            case "漳州":return ["芗城區","龍文區","雲霄縣","漳浦縣","诏安縣","長泰縣","東山縣","南靖縣","平和縣","華安縣","龍海市"]
            case "南平":return ["延平區","順昌縣","浦城縣","光澤縣","松溪縣","政和縣","邵武市","武夷山市","建瓯市","建陽市"]
            case "龍岩":return ["新羅區","長汀縣","永定縣","上杭縣","武平縣","連城縣","漳平市"]
            case "甯德":return ["蕉城區","霞浦縣","古田縣","屏南縣","壽甯縣","周甯縣","柘榮縣","福安市","福鼎市"]
            /** 湖南 */
            case "長沙":return ["芙蓉區","天心區","嶽麓區","開福區","雨花區","望城區","長沙縣","甯鄉縣","浏陽市"]
            case "株洲":return ["荷塘區","蘆淞區","石峰區","天元區","株洲縣","攸縣","茶陵縣","炎陵縣","醴陵市"]
            case "湘潭":return ["雨湖區","嶽塘區","湘潭縣","湘鄉市","韶山市"]
            case "衡陽":return ["珠晖區","雁峰區","石鼓區","蒸湘區","南嶽區","衡陽縣","衡南縣","衡山縣","衡東縣","祁東縣","耒陽市","常甯市"]
            case "邵陽":return ["雙清區","大祥區","北塔區","邵東縣","新邵縣","邵陽縣","隆回縣","洞口縣","綏甯縣","新甯縣","城步苗族自治縣","武岡市"]
            case "嶽陽":return ["嶽陽樓區","雲溪區","君山區","嶽陽縣","華容縣","湘陰縣","平江縣","汨羅市","臨湘市"]
            case "常德":return ["武陵區","鼎城區","安鄉縣","漢壽縣","澧縣","臨澧縣","桃源縣","石門縣","津市市"]
            case "張家界":return ["永定區","武陵源區","慈利縣","桑植縣"]
            case "益陽":return ["資陽區","赫山區","南縣","桃江縣","安化縣","沅江市"]
            case "郴州":return ["北湖區","蘇仙區","桂陽縣","宜章縣","永興縣","嘉禾縣","臨武縣","汝城縣","桂東縣","安仁縣","資興市"]
            case "永州":return ["零陵區","冷水灘區","祁陽縣","東安縣","雙牌縣","道縣","江永縣","甯遠縣","藍山縣","新田縣","江華瑤族自治縣"]
            case "懷化":return ["鶴城區","中方縣","沅陵縣","辰溪縣","溆浦縣","會同縣","麻陽苗族自治縣","新晃侗族自治縣","芷江侗族自治縣","靖州苗族侗族自治縣","通道侗族自治縣","洪江市"]
            case "婁底":return ["婁星區","雙峰縣","新化縣","冷水江市","漣源市"]
            case "湘西土家苗族自治區":return ["吉首市","泸溪縣","鳳凰縣","花垣縣","保靖縣","古丈縣","永順縣","龍山縣"]
            /** 湖北 */
            case "武漢":return ["江岸區","江漢區","漢口區","漢陽區","武昌區","青山區","洪山區","東西湖區","漢南區","蔡甸區","江夏區","黃陂區","新洲區"]
            case "襄陽":return ["襄城區","樊城區","襄州區","南漳縣","谷城縣","保康縣","老河口市","棗陽市","宜城市"]
            case "黃石":return ["黃石港區","西塞山區","下陸區","鐵山區","陽新縣","大冶市"]
            case "十堰":return ["茅箭區","張灣區","鄖縣","鄖西縣","竹山縣","竹溪縣","房縣","丹江口市"]
            case "宜昌":return ["西陵區","伍家崗區","點軍區","猇亭區","夷陵區","遠安縣","興山縣","秭歸縣","長陽土家族自治縣","五峰土家族自治縣","宜都市","當陽市","枝江市"]
            case "鄂州":return ["梁子湖區","華容區","鄂城區"]
            case "荊門":return ["東寶區","掇刀區","京山縣","沙洋縣","鐘祥市"]
            case "孝感":return ["孝南區","孝昌縣","大悟縣","雲夢縣","應城市","安陸市","漢川市"]
            case "荊州":return ["沙市區","荊州區","公安縣","監利縣","江陵縣","石首市","洪湖市","松滋市"]
            case "黃岡":return ["黃州區","團風縣","紅安縣","羅田縣","英山縣","浠水縣","蕲春縣","黃梅縣","麻城市","武穴市"]
            case "鹹甯":return ["鹹安區","溫泉開發區","嘉魚縣","通城縣","崇陽縣","通山縣","赤壁市"]
            case "随州":return ["曾都區","随縣","廣水市"]
            case "恩施土家族苗族自治州":return ["恩施市","利川市","建始縣","巴東縣","宣恩縣","鹹豐縣","來鳳縣","鶴峰縣"]
            /** 遼甯 */
            case "沈陽":return ["和平區","沈河區","大東區","皇姑區","鐵西區","蘇家屯區","東陵區","沈北新區","于洪區","遼中縣","康平縣","法庫縣","新民市"]
            case "大連":return ["中山區","西崗區","沙河口區","甘井子區","旅順口區","金州區","長海縣","瓦房店市","普蘭店市","莊河市"]
            case "鞍山":return ["鐵東區","鐵西區","立山區","千山區","台安縣","岫岩滿族自治縣","海城市"]
            case "撫順":return ["新撫區","東洲區","望花區","順城區","撫順縣","新賓滿族自治縣","清原滿族自治縣"]
            case "本溪":return ["平山區","溪湖區","明山區","南芬區","本溪滿族自治縣","桓仁滿族自治縣"]
            case "丹東":return ["元寶區","振興區","振安區","寬甸滿族自治縣","東港市","鳳城市"]
            case "錦州":return ["古塔區","淩河區","太和區","黑山縣","義縣","淩海市","北鎮市"]
            case "營口":return ["站前區","西市區","鲅魚圈區","老邊區","蓋州市","大石橋市"]
            case "阜新":return ["海州區","新邱區","太平區","清河門區","細河區","阜新蒙古族自治縣","彰武縣"]
            case "遼陽":return ["白塔區","文聖區","宏偉區","弓長嶺區","太子河區","遼陽縣","燈塔市"]
            case "盤錦":return ["雙台子區","興隆台區","大窪縣","盤山縣"]
            case "鐵嶺":return ["銀州區","清河區","鐵嶺縣","西豐縣","昌圖縣","調兵山市","開原市"]
            case "朝陽":return ["雙塔區","龍城區","朝陽縣","建平縣","喀喇沁左翼蒙古族自治縣","北票市","淩源市"]
            case "葫蘆島":return ["連山區","龍港區","南票區","綏中縣","建昌縣","興城市"]
            /** 吉林 */
            case "長春":return ["南關區","寬城區","朝陽區","二道區","綠園區","雙陽區","農安縣","九台市","榆樹市","德惠市"]
            case "吉林":return ["昌邑區","龍潭區","船營區","豐滿區","永吉縣","蛟河市","桦甸市","舒蘭市","磐石市"]
            case "四平":return ["鐵西區","鐵東區","梨樹縣","伊通滿族自治縣","公主嶺市","雙遼市"]
            case "遼源":return ["龍山區","西安區","東豐縣","東遼縣"]
            case "通化":return ["東昌區","二道江區","通化縣","輝南縣","柳河縣","梅河口市","集安市"]
            case "白山":return ["八道江區","江源區","撫松縣","靖宇縣","長白北韓族自治縣","臨江市"]
            case "松原":return ["臨江市","甯江區","前郭爾羅斯蒙古族自治縣","長嶺縣","乾安縣","扶餘縣"]
            case "白城":return ["洮北區","鎮赉縣","通榆縣","洮南市","大安市"]
            case "延邊北韓族自治區":return ["延吉市","圖們市","敦化市","珲春市","龍井市","和龍市","汪清縣","安圖縣"]
            /** 黑龍江 */
            case "哈爾濱":return ["道裡區","南崗區","道外區","平房區","松北區","香坊區","呼蘭區","阿城區","依蘭縣","方正縣","賓縣","巴彥縣","木蘭縣","通河縣","延壽縣","雙城市","尚志市","五常市"]
            case "齊齊哈爾":return ["龍沙區","建華區","鐵鋒區","昂昂溪區","富拉爾基區","碾子山區","梅裡斯達斡爾族區","龍江縣","依安縣","泰來縣","甘南縣","富裕縣","克山縣","克東縣","拜泉縣","讷河市"]
            case "雞西":return ["雞冠區","恒山區","滴道區","梨樹區","城子河區","麻山區","雞東縣","虎林市","密山市"]
            case "鶴崗":return ["向陽區","工農區","南山區","興安區","東山區","興山區","蘿北縣","綏濱縣"]
            case "雙鴨山":return ["尖山區","嶺東區","四方台區","寶山區","集賢縣","友誼縣","寶清縣","饒河縣"]
            case "佳木斯":return ["向陽區","前進區","東風區","郊區","桦南縣","桦川縣","湯原縣","撫遠縣","同江市","富錦市"]
            case "大慶":return ["薩爾圖區","龍鳳區","讓胡路區","紅崗區","大同區","肇州縣","肇源縣","林甸縣","杜爾伯特蒙古族自治縣"]
            case "伊春":return ["伊春區","南岔區","友好區","西林區","翠巒區","新青區","美溪區","金山屯區","五營區","烏馬河區","湯旺河區","帶嶺區","烏伊嶺區","紅星區","上甘嶺區","嘉蔭縣","鐵力市"]
            case "七台河":return ["新興區","桃山區","茄子河區","勃利縣"]
            case "牡丹江":return ["東安區","陽明區","愛民區","西安區","東甯縣","林口縣","綏芬河市","海林市","甯安市","穆棱市"]
            case "黑河":return ["愛輝區","嫩江縣","遜克縣","孫吳縣","北安市","五大連池市"]
            case "綏化":return ["北林區","望奎縣","蘭西縣","青岡縣","慶安縣","明水縣","綏棱縣","安達市","肇東市","海倫市"]
            case "大興安嶺":return ["呼瑪縣","塔河縣","漠河縣"]
            /** 河北 */
            case "石家莊":return ["長安區","橋東區","橋西區","新華區","井陉礦區","裕華區","井陉縣","正定縣","栾城縣","行唐縣","靈壽縣","高邑縣","深澤縣","贊皇縣","無極縣","平山縣","元氏縣","趙縣","辛集市","藁城市","晉州市","新樂市","鹿泉市"]
            case "唐山":return ["路南區","路北區","古冶區","開平區","豐南區","豐潤區","灤縣","灤南縣","樂亭縣","遷西縣","玉田縣","唐海縣","遵化市","遷安市"]
            case "邯鄲":return ["邯山區","叢台區","複興區","峰峰礦區","邯鄲縣","臨漳縣","成安縣","大名縣","涉縣","磁縣","肥鄉縣","永年縣","邱縣","雞澤縣","廣平縣","館陶縣","魏縣","曲周縣","武安市"]
            case "承德":return ["雙橋區","雙灤區","鷹手營子礦區","承德縣","興隆縣","平泉縣","灤平縣","隆化縣","豐甯滿族自治縣","寬城滿族自治縣","圍場滿族蒙古族自治縣"]
            case "廊坊":return ["安次區","廣陽區","固安縣","永清縣","香河縣","大城縣","文安縣","大廠回族自治縣","霸州市","三河市"]
            case "衡水":return ["桃城區","棗強縣","武邑縣","武強縣","饒陽縣","安平縣","故城縣","景縣","阜城縣","冀州市","深州市"]
            case "秦皇島":return ["海港區","山海關區","北戴河區","青龍滿族自治縣","昌黎縣","撫甯縣","盧龍縣"]
            case "邢台":return ["橋東區","橋西區","邢台縣","臨城縣","内丘縣","柏鄉縣","隆堯縣","任縣","南和縣","甯晉縣","巨鹿縣","新河縣","廣宗縣","平鄉縣","威縣","清河縣","臨西縣","南宮市","沙河市"]
            case "保定":return ["新市區","北市區","南市區","滿城縣","清苑縣","涞水縣","阜平縣","徐水縣","定興縣","唐縣","高陽縣","容城縣","涞源縣","望都縣","安新縣","易縣","曲陽縣","蠡縣","順平縣","博野縣","雄縣","涿州市","定州市","安國市","高碑店市"]
            case "張家口":return ["橋東區","橋西區","宣化區","下花園區","宣化縣","張北縣","康保縣","沽源縣","尚義縣","蔚縣","陽原縣","懷安縣","萬全縣","懷來縣","涿鹿縣","赤城縣","崇禮縣"]
            case "滄州":return ["新華區","運河區","滄縣","青縣","東光縣","海興縣","鹽山縣","肅甯縣","南皮縣","吳橋縣","獻縣","孟村回族自治縣","泊頭市","任丘市","黃骅市","河間市"]
            /** 河南 */
            case "鄭州":return ["中原區","二七區","管城回族區","金水區","上街區","惠濟區","中牟縣","鞏義市","荥陽市","新密市","新鄭市","登封市"]
            case "洛陽":return ["老城區","西工區","瀍河回族區","澗西區","吉利區","洛龍區","孟津縣","新安縣","栾川縣","嵩縣","汝陽縣","宜陽縣","洛甯縣","伊川縣","偃師市"]
            case "商丘":return ["梁園區","睢陽區","民權縣","睢縣","甯陵縣","柘城縣","虞城縣","夏邑縣","永城市"]
            case "安陽":return ["文峰區","北關區","殷都區","龍安區","安陽縣","湯陰縣","滑縣","内黃縣","林州市"]
            case "南陽":return ["宛城區","卧龍區","南召縣","方城縣","西峽縣","鎮平縣","内鄉縣","淅川縣","社旗縣","唐河縣","新野縣","桐柏縣","鄧州市"]
            case "開封":return ["龍亭區","順河回族區","鼓樓區","禹王台區","金明區","杞縣","通許縣","尉氏縣","開封縣","蘭考縣"]
            case "平頂山":return ["新華區","衛東區","石龍區","湛河區","寶豐縣","葉縣","魯山縣","郏縣","舞鋼市","汝州市"]
            case "焦作":return ["解放區","中站區","馬村區","山陽區","修武縣","博愛縣","武陟縣","溫縣","沁陽市","孟州市"]
            case "新鄉":return ["紅旗區","衛濱區","鳳泉區","牧野區","新鄉縣","獲嘉縣","原陽縣","延津縣","封丘縣","長垣縣","衛輝市","輝縣市"]
            case "鶴壁":return ["鶴山區","山城區","淇濱區","浚縣","淇縣"]
            case "濮陽":return ["華龍區","清豐縣","南樂縣","範縣","台前縣","濮陽縣"]
            case "許昌":return ["魏都區","許昌縣","鄢陵縣","襄城縣","禹州市","長葛市"]
            case "漯河":return ["源彙區","郾城區","召陵區","舞陽縣","臨颍縣"]
            case "三門峽":return ["湖濱區","渑池縣","陝縣","盧氏縣","義馬市","靈寶市"]
            case "信陽":return ["浉河區","平橋區","羅山縣","光山縣","新縣","商城縣","固始縣","潢川縣","淮濱縣","息縣"]
            case "周口":return ["川彙區","扶溝縣","西華縣","商水縣","沈丘縣","鄲城縣","淮陽縣","太康縣","鹿邑縣","項城市"]
            case "駐馬店":return ["驿城區","西平縣","上蔡縣","平輿縣","正陽縣","确山縣","泌陽縣","汝南縣","遂平縣","新蔡縣"]
            case "濟源":return ["沁園街道","濟水街道","北海街道","天壇街道","玉泉街道","克井鎮","五龍口鎮","轵城鎮","承留鎮","邵原鎮","坡頭鎮","梨林鎮","大峪鎮","思禮鎮","王屋鎮","下冶鎮"]
            /** 山東 */
            case "濟南":return ["曆下區","市中區","槐蔭區","天橋區","曆城區","長清區","平陰縣","濟陽縣","商河縣","章丘市"]
            case "青島":return ["市南區","市北區","四方區","黃島區","崂山區","李滄區","城陽區","膠州市","即墨市","平度市","膠南市","萊西市"]
            case "菏澤":return ["牡丹區","曹縣","單縣","成武縣","巨野縣","郓城縣","鄄城縣","定陶縣","東明縣"]
            case "淄博":return ["淄川區","張店區","博山區","臨淄區","周村區","桓台縣","高青縣","沂源縣"]
            case "棗莊":return ["市中區","薛城區","峄城區","台兒莊區","山亭區","滕州市"]
            case "東營":return ["東營區","河口區","墾利縣","利津縣","廣饒縣"]
            case "煙台":return ["芝罘區","福山區","牟平區","萊山區","長島縣","龍口市","萊陽市","萊州市","蓬萊市","招遠市","栖霞市","海陽市"]
            case "濰坊":return ["濰城區","寒亭區","坊子區","奎文區","臨朐縣","昌樂縣","青州市","諸城市","壽光市","安丘市","高密市","昌邑市"]
            case "濟甯":return ["市中區","任城區","微山縣","魚台縣","金鄉縣","嘉祥縣","汶上縣","泗水縣","梁山縣","曲阜市","兖州市","鄒城市"]
            case "泰安":return ["泰山區","岱嶽區","甯陽縣","東平縣","新泰市","肥城市"]
            case "威海":return ["環翠區","文登市","榮成市","乳山市"]
            case "日照":return ["東港區","岚山區","五蓮縣","莒縣"]
            case "萊蕪":return ["萊城區","鋼城區"]
            case "濱州":return ["濱城區","惠民縣","陽信縣","無棣縣","沾化縣","博興縣","鄒平縣"]
            case "德州":return ["德城區","陵縣","甯津縣","慶雲縣","臨邑縣","齊河縣","平原縣","夏津縣","武城縣","樂陵市","禹城市"]
            case "聊城":return ["東昌府區","陽谷縣","莘縣","茌平縣","東阿縣","冠縣","高唐縣","臨清市"]
            case "臨沂":return["蘭山區","羅莊區","河東區","沂南縣","郯城縣","沂水縣","蒼山縣","費縣","平邑縣","莒南縣","蒙陰縣","臨沭縣"]
            /** 陝西 */
            case "西安":return ["新城區","碑林區","蓮湖區","灞橋區","未央區","雁塔區","閻良區","臨潼區","長安區","藍田縣","周至縣","戶縣","高陵縣"]
            case "寶雞":return ["渭濱區","金台區","陳倉區","鳳翔縣","岐山縣","扶風縣","眉縣","隴縣","千陽縣","麟遊縣","鳳縣","太白縣"]
            case "鹹陽":return ["秦都區","楊陵區","渭城區","三原縣","泾陽縣","乾縣","禮泉縣","永壽縣","彬縣","長武縣","旬邑縣","淳化縣","武功縣","興平市"]
            case "渭南":return ["臨渭區","華縣","潼關縣","大荔縣","合陽縣","澄城縣","蒲城縣","白水縣","富平縣","韓城市","華陰市"]
            case "銅川":return ["王益區","印台區","耀州區","宜君縣"]
            case "延安":return ["寶塔區","延長縣","延川縣","子長縣","安塞縣","志丹縣","吳起縣","甘泉縣","富縣","洛川縣","宜川縣","黃龍縣","黃陵縣"]
            case "榆林":return ["榆陽區","神木縣","府谷縣","橫山縣","靖邊縣","定邊縣","綏德縣","米脂縣","佳縣","吳堡縣","清澗縣","子洲縣"]
            case "漢中":return ["漢台區","南鄭縣","城固縣","洋縣","西鄉縣","勉縣","甯強縣","略陽縣","鎮巴縣","留壩縣","佛坪縣"]
            case "安康":return ["漢濱區","漢陰縣","石泉縣","甯陝縣","紫陽縣","岚臯縣","平利縣","鎮坪縣","旬陽縣","白河縣"]
            case "商洛":return ["商州區","洛南縣","丹鳳縣","商南縣","山陽縣","鎮安縣","柞水縣"]
            /** 四川 */
            case "成都":return ["錦江區","青羊區","金牛區","武侯區","成華區","龍泉驿區","青白江區","新都區","溫江區","金堂縣","雙流縣","郫縣","大邑縣","蒲江縣","新津縣","都江堰市","彭州市","邛崃市","崇州市"]
            case "自貢":return ["自流井區","貢井區","大安區","沿灘區","榮縣","富順縣"]
            case "攀枝花":return ["東區","西區","仁和區","米易縣","鹽邊縣"]
            case "泸州":return ["江陽區","納溪區","龍馬潭區","泸縣","合江縣","叙永縣","古蔺縣"]
            case "德陽":return ["旌陽區","中江縣","羅江縣","廣漢市","什邡市","綿竹市"]
            case "綿陽":return ["涪城區","遊仙區","三台縣","鹽亭縣","安縣","梓潼縣","北川羌族自治縣","平武縣","江油市"]
            case "廣元":return ["利州區","元壩區","朝天區","旺蒼縣","青川縣","劍閣縣","蒼溪縣"]
            case "遂甯":return ["船山區","安居區","蓬溪縣","射洪縣","大英縣"]
            case "内江":return ["市中區","東興區","威遠縣","資中縣","隆昌縣"]
            case "樂山":return ["市中區","沙灣區","五通橋區","金口河區","犍為縣","井研縣","夾江縣","沐川縣","峨邊彜族自治縣","馬邊彜族自治縣","峨眉山市"]
            case "南充":return ["順慶區","高坪區","嘉陵區","南部縣","營山縣","蓬安縣","儀隴縣","西充縣","阆中市"]
            case "眉山":return ["東坡區","仁壽縣","彭山縣","洪雅縣","丹棱縣","青神縣"]
            case "宜賓":return ["翠屏區","南溪區","宜賓縣","江安縣","長甯縣","高縣","珙縣","筠連縣","興文縣","屏山縣"]
            case "廣安":return ["廣安區","嶽池縣","武勝縣","鄰水縣","華蓥市"]
            case "達州":return ["通川區","達縣","宣漢縣","開江縣","大竹縣","渠縣","萬源市"]
            case "雅安":return ["雨城區","名山縣","荥經縣","漢源縣","石棉縣","天全縣","蘆山縣","寶興縣"]
            case "巴中":return ["巴州區","通江縣","南江縣","平昌縣"]
            case "資陽":return ["巴州區","通江縣","南江縣","平昌縣"]
            case "阿壩藏族羌族自治州":return ["汶川縣","理縣","茂縣","松潘縣","九寨溝縣","金川縣","小金縣","黑水縣","馬爾康縣","壤塘縣","阿壩縣","若爾蓋縣","紅原縣"]
            case "甘孜藏族自治州":return ["康定縣","泸定縣","丹巴縣","九龍縣","雅江縣","道孚縣","爐霍縣","甘孜縣","新龍縣","德格縣","白玉縣","石渠縣","色達縣","理塘縣","巴塘縣","鄉城縣","稻城縣","得榮縣"]
            case "涼山彜族自治州":return ["西昌市","木裡藏族自治縣","鹽源縣","德昌縣","會理縣","會東縣","甯南縣","普格縣","布拖縣","金陽縣","昭覺縣","喜德縣","冕甯縣","越西縣","甘洛縣","美姑縣","雷波縣"]
            /** 貴州 */
            case "貴陽":return ["南明區","雲岩區","花溪區","烏當區","白雲區","小河區","開陽縣","息烽縣","修文縣","清鎮市"]
            case "六盤水":return ["鐘山區","六枝特區","水城縣","盤縣"]
            case "遵義":return ["紅花崗區","彙川區","遵義縣","桐梓縣","綏陽縣","正安縣","道真仡佬族苗族自治縣","務川仡佬族苗族自治縣","鳳岡縣","湄潭縣","餘慶縣","習水縣","赤水市","仁懷市"]
            case "安順":return ["西秀區","平壩縣","普定縣","鎮甯布依族苗族自治縣","關嶺布依族苗族自治縣","紫雲苗族布依族自治縣"]
            case "黔南布依族苗族自治州":return ["都勻市","福泉市","荔波縣","貴定縣","甕安縣","獨山縣","平塘縣","羅甸縣","長順縣","龍裡縣","惠水縣","三都水族自治縣"]
            case "黔西南布依族苗族自治州":return ["興義市","興仁縣","普安縣","晴隆縣","貞豐縣","望谟縣","冊亨縣","安龍縣"]
            case "黔東南苗族侗族自治州":return ["凱裡市","黃平縣","施秉縣","三穗縣","鎮遠縣","岑鞏縣","天柱縣","錦屏縣","劍河縣","台江縣","黎平縣","榕江縣","從江縣","雷山縣","麻江縣","丹寨縣"]
            case "銅仁":return ["碧江區","萬山區","江口縣","石阡縣","思南縣","德江縣","玉屏侗族自治縣","印江土家族苗族自治縣","沿河土家族自治縣","松桃苗族自治縣"]
            case "畢節":return ["七星關區","大方縣","黔西縣","金沙縣","織金縣","納雍縣","威甯彜族回族苗族自治縣","赫章縣"]
            /** 安徽 */
            case "合肥":return ["瑤海區","廬陽區","蜀山區","包河區","長豐縣","肥東縣","肥西縣","廬江縣","巢湖市"]
            case "蕪湖":return ["鏡湖區","弋江區","鸠江區","三山區","蕪湖縣","繁昌縣","南陵縣","無為縣"]
            case "安慶":return ["迎江區","大觀區","宜秀區","懷甯縣","枞陽縣","潛山縣","太湖縣","宿松縣","望江縣","嶽西縣","桐城市"]
            case "馬鞍山":return ["金家莊區","花山區","雨山區","當塗縣","含山縣","和縣"]
            case "阜陽":return ["颍州區","颍東區","颍泉區","臨泉縣","太和縣","阜南縣","颍上縣","界首市"]
            case "六安":return ["金安區","裕安區","壽縣","霍邱縣","舒城縣","金寨縣","霍山縣"]
            case "滁州":return ["琅琊區","南谯區","來安縣","全椒縣","定遠縣","鳳陽縣","天長市","明光市"]
            case "宿州":return ["埇橋區","砀山縣","蕭縣","靈璧縣","泗縣"]
            case "蚌埠":return ["龍子湖區","蚌山區","禹會區","淮上區","懷遠縣","五河縣","固鎮縣"]
            case "淮南":return ["大通區","田家庵區","謝家集區","八公山區","潘集區","鳳台縣"]
            case "宣城":return ["宣州區","郎溪縣","廣德縣","泾縣","績溪縣","旌德縣","甯國市"]
            case "亳州":return ["谯城區","渦陽縣","蒙城縣","利辛縣"]
            case "淮北":return ["杜集區","相山區","烈山區","濉溪縣"]
            case "銅陵":return ["銅官山區","獅子山區","郊區","銅陵縣"]
            case "黃山":return ["屯溪區","黃山區","徽州區","歙縣","休甯縣","黟縣","祁門縣"]
            case "池州":return ["貴池區","東至縣","石台縣","青陽縣"]
            /** 江西 */
            case "南昌":return ["東湖區","西湖區","青雲譜區","灣裡區","青山湖區","南昌縣","建立縣","安義縣","進賢縣"]
            case "九江":return ["廬山區","浔陽區","九江縣","武甯縣","修水縣","永修縣","德安縣","星子縣","都昌縣","湖口縣","彭澤縣","瑞昌市","共青城市"]
            case "景德鎮":return ["昌江區","珠山區","浮梁縣","樂平市"]
            case "萍鄉":return ["安源區","湘東區","蓮花縣","上栗縣","蘆溪縣"]
            case "新餘":return ["渝水區","分宜縣"]
            case "鷹潭":return ["月湖區","餘江縣","貴溪市"]
            case "贛州":return ["章貢區","贛縣","信豐縣","大餘縣","上猶縣","崇義縣","安遠縣","龍南縣","定南縣","全南縣","甯都縣","于都縣","興國縣","會昌縣","尋烏縣","石城縣","瑞金市","南康市"]
            case "宜春":return ["袁州區","奉新縣","萬載縣","上高縣","宜豐縣","靖安縣","銅鼓縣","豐城市","樟樹市","高安市"]
            case "上饒":return ["信州區","上饒縣","廣豐縣","玉山縣","鉛山縣","橫峰縣","弋陽縣","餘幹縣","鄱陽縣","萬年縣","婺源縣","德興市"]
            case "吉安":return ["吉州區","青原區","吉安縣","吉水縣","峽江縣","新幹縣","永豐縣","泰和縣","遂川縣","萬安縣","安福縣","永新縣","井岡山市"]
            case "撫州":return ["臨川區","南城縣","黎川縣","南豐縣","崇仁縣","樂安縣","宜黃縣","金溪縣","資溪縣","東鄉縣","廣昌縣"]
            /** 雲南 */
            case "昆明":return ["五華區","盤龍區","官渡區","西山區","東川區","呈貢區","晉甯縣","富民縣","宜良縣","石林彜族自治縣","嵩明縣","祿勸彜族苗族自治縣","尋甸回族彜族自治縣","安甯市"]
            case "曲靖":return ["麒麟區","馬龍縣","陸良縣","師宗縣","羅平縣","富源縣","會澤縣","沾益縣","宣威市"]
            case "玉溪":return ["紅塔區","江川縣","澄江縣","通海縣","華甯縣","易門縣","峨山彜族自治縣","新平彜族傣族自治縣","元江哈尼族彜族傣族自治縣"]
            case "保山":return ["隆陽區","施甸縣","騰沖縣","龍陵縣","昌甯縣"]
            case "昭通":return ["昭陽區","魯甸縣","巧家縣","鹽津縣","大關縣","永善縣","綏江縣","鎮雄縣","彜良縣","威信縣","水富縣"]
            case "麗江":return ["古城區","玉龍納西族自治縣","永勝縣","華坪縣","甯蒗彜族自治縣"]
            case "普洱":return ["思茅區","甯洱哈尼族彜族自治縣","墨江哈尼族自治縣","景東彜族自治縣","景谷傣族彜族自治縣","鎮沅彜族哈尼族拉祜族自治縣","江城哈尼族彜族自治縣","孟連傣族拉祜族佤族自治縣","瀾滄拉祜族自治縣","西盟佤族自治縣"]
            case "臨滄":return ["臨翔區","鳳慶縣","雲縣","永德縣","鎮康縣","雙江拉祜族佤族布朗族傣族自治縣","耿馬傣族佤族自治縣","滄源佤族自治縣"]
            case "楚雄彜族自治州":return ["楚雄市","雙柏縣","牟定縣","南華縣","姚安縣","大姚縣","永仁縣","元謀縣","武定縣","祿豐縣"]
            case "大理白族自治州":return ["大理市","漾濞彜族自治縣","祥雲縣","賓川縣","彌渡縣","南澗彜族自治縣","巍山彜族回族自治縣","永平縣","雲龍縣","洱源縣","劍川縣","鶴慶縣"]
            case "紅河哈尼族彜族自治州":return ["個舊市","開遠市","蒙自市","屏邊苗族自治縣","建水縣","石屏縣","彌勒縣","泸西縣","元陽縣","紅河縣","金平苗族瑤族傣族自治縣","綠春縣","河口瑤族自治縣"]
            case "文山壯族苗族自治州":return ["文山市","硯山縣","西疇縣","麻栗坡縣","馬關縣","丘北縣","廣南縣","富甯縣"]
            case "西雙版納傣族自治州":return ["景洪市","勐海縣","勐臘縣"]
            case "德宏傣族景頗族自治州":return ["瑞麗市","芒市","梁河縣","盈江縣","隴川縣"]
            case "怒江傈僳族自治州":return ["泸水縣","福貢縣","貢山獨龍族怒族自治縣","蘭坪白族普米族自治縣"]
            case "迪慶藏族自治州":return ["香格裡拉縣","德欽縣","維西傈僳族自治縣"]
            /** 内蒙古 */
            case "呼和浩特":return ["新城區","回民區","玉泉區","賽罕區","土默特左旗","托克托縣","和林格爾縣","清水河縣","武川縣"]
            case "標頭":return ["東河區","昆都侖區","青山區","石拐區","白雲鄂博礦區","九原區","土默特右旗","固陽縣","達爾罕茂明安聯合旗"]
            case "烏海":return ["海勃灣區","海南區","烏達區"]
            case "赤峰":return ["紅山區","元寶山區","松山區","阿魯科爾沁旗","巴林左旗","巴林右旗","林西縣","克什克騰旗","翁牛特旗","喀喇沁旗","甯城縣","敖漢旗"]
            case "通遼":return ["科爾沁區","科爾沁左翼中旗","科爾沁左翼後旗","開魯縣","庫倫旗","奈曼旗","紮魯特旗","霍林郭勒市"]
            case "鄂爾多斯":return ["東勝區","達拉特旗","準格爾旗","鄂托克前旗","鄂托克旗","杭錦旗","烏審旗","伊金霍洛旗"]
            case "呼倫貝爾":return ["海拉爾區","阿榮旗","莫力達瓦達斡爾族自治旗","鄂倫春自治旗","鄂溫克族自治旗","陳巴爾虎旗","新巴爾虎左旗","新巴爾虎右旗","滿洲裡市","牙克石市","紮蘭屯市","額爾古納市","根河市"]
            case "巴彥淖爾":return ["臨河區","五原縣","磴口縣","烏拉特前旗","烏拉特中旗","烏拉特後旗","杭錦後旗"]
            case "烏蘭察布":return ["集甯區","卓資縣","化德縣","商都縣","興和縣","涼城縣","察哈爾右翼前旗","察哈爾右翼中旗","察哈爾右翼後旗","四子王旗","豐鎮市"]
            case "興安盟":return ["烏蘭浩特市","阿爾山市","科爾沁右翼前旗","科爾沁右翼中旗","紮赉特旗","突泉縣"]
            case "錫林郭勒盟":return ["二連浩特市","錫林浩特市","阿巴嘎旗","蘇尼特左旗","蘇尼特右旗","東烏珠穆沁旗","西烏珠穆沁旗","太仆寺旗","鑲黃旗","正鑲白旗","正藍旗","多倫縣"]
            case "阿拉善盟":return ["阿拉善左旗","阿拉善右旗","額濟納旗"]
            /** 廣西 */
            case "南甯":return ["興甯區","青秀區","江南區","西鄉塘區","良慶區","邕甯區","武鳴縣","隆安縣","馬山縣","上林縣","賓陽縣","橫縣"]
            case "柳州":return ["城中區","魚峰區","柳南區","柳北區","柳江縣","柳城縣","鹿寨縣","融安縣","融水苗族自治縣","三江侗族自治縣"]
            case "桂林":return ["秀峰區","疊彩區","象山區","七星區","雁山區","陽朔縣","臨桂縣","靈川縣","全州縣","興安縣","永福縣","灌陽縣","龍勝各族自治縣","資源縣","平樂縣","荔蒲縣","恭城瑤族自治縣"]
            case "梧州":return ["萬秀區","蝶山區","長洲區","蒼梧縣","藤縣","蒙山縣","岑溪市"]
            case "北海":return ["海城區","銀海區","鐵山港區","合浦縣"]
            case "防城港":return ["港口區","防城區","上思縣","東興市"]
            case "欽州":return ["欽南區","欽北區","靈山縣","浦北縣"]
            case "貴港":return ["港北區","港南區","覃塘區","平南縣","桂平市"]
            case "玉林":return ["玉州區","容縣","陸川縣","博白縣","興業縣","北流市"]
            case "百色":return ["右江區","田陽縣","田東縣","平果縣","德保縣","靖西縣","那坡縣","淩雲縣","樂業縣","田林縣","西林縣","隆林各族自治縣"]
            case "賀州":return ["八步區","昭平縣","鐘山縣","富川瑤族自治縣"]
            case "河池":return ["金城江區","南丹縣","天峨縣","鳳山縣","東蘭縣","羅城仫佬族自治縣","環江毛南族自治縣","巴馬瑤族自治縣","都安瑤族自治縣","大化瑤族自治縣","宜州市"]
            case "來賓":return ["興賓區","忻城縣","象州縣","武宣縣","金秀瑤族自治縣","合山市"]
            case "崇左":return ["江洲區","扶綏縣","甯明縣","龍州縣","大新縣","天等縣","憑祥市"]
            /** 西藏 */
            case "拉薩":return ["城關區","林周縣","當雄縣","尼木縣","曲水縣","堆龍德慶縣","達孜縣","墨竹工卡縣"]
            case "昌都地區":return ["昌都縣","江達縣","貢覺縣","類烏齊縣","丁青縣","察雅縣","八宿縣","左貢縣","芒康縣","洛隆縣","邊壩縣"]
            case "林芝地區":return ["林芝縣","工布江達縣","米林縣","墨脫縣","波密縣","察隅縣","朗縣"]
            case "山南地區":return ["乃東縣","紮囊縣","貢嘎縣","桑日縣","瓊結縣","曲松縣","措美縣","洛紮縣","加查縣","隆子縣","錯那縣","浪卡子縣"]
            case "日喀則地區":return ["日喀則市","南木林縣","江孜縣","定日縣","薩迦縣","拉孜縣","昂仁縣","謝通門縣","白朗縣","仁布縣","康馬縣","定結縣","仲巴縣","亞東縣","吉隆縣","聶拉木縣","薩嘎縣","崗巴縣"]
            case "那曲地區":return ["那曲縣","嘉黎縣","比如縣","聶榮縣","安多縣","申紮縣","索縣","班戈縣","巴青縣","尼瑪縣"]
            case "阿裡地區":return ["普蘭縣","劄達縣","噶爾縣","日土縣","革吉縣","改則縣","措勤縣"]
            /** 甯夏 */
            case "銀川":return ["興慶區","西夏區","金鳳區","永甯縣","賀蘭縣","靈武市"]
            case "石嘴山":return ["大武口區","惠農區","平羅縣"]
            case "吳忠":return ["利通區","紅寺堡區","鹽池縣","同心縣","青銅峽市"]
            case "固原":return ["原州區","西吉縣","隆德縣","泾源縣","彭陽縣"]
            case "中衛":return ["沙坡頭區","中甯縣","海原縣"]
            /** 海南 */
            case "海口":return ["秀英區","龍華區","瓊山區","美蘭區"]
            case "三亞":return [""]
            /** 台灣 */
            case "台北":return [""]
            case "高雄":return [""]
            case "基隆":return [""]
            case "台中":return [""]
            case "台南":return [""]
            case "新竹":return [""]
            case "嘉義":return [""]
                
            default:
                current_province = "直轄市"
                current_city = "北京"
                return beijing
            }
        }
    }
}
           

也可以使用json檔案存儲,作為資源放在App中,程式裡根據一定規則讀取檔案,json 檔案見:

https://codepen.io/acelibin/pen/wGooev

2、自定義視圖 AddressBoxView.swift,以便靈活調用和個性化修改

具體内容如下所示:

import UIKit

//系統視圖寬度
let K_APP_WIDTH = UIScreen.main.bounds.size.width

@objc protocol AddressBoxViewDelegate {
    /** 關閉(取消) */
    @objc optional func addressBoxCloseAction(sender:UIButton)

    /** 完成 */
    @objc optional func addressBoxFinishAction(sender:UIButton,selectValue:String)
}


/**
 * 位址選擇彈框
 */
@objc class AddressBoxView: UIView,UIPickerViewDelegate,UIPickerViewDataSource {

    /** 省份 */
    @objc var province:String?

    /** 市 */
    @objc var city:String?
    
    /** 縣 */
    @objc var county:String?

    @objc weak var delegate:AddressBoxViewDelegate?

    lazy var w = CGFloat.init(0)
    lazy var h = CGFloat.init(0)
    lazy var x = CGFloat.init(0)
    lazy var y = CGFloat.init(0)
    /** 修改此值可以控制是兩級還是三級關聯 */
    let list_cell_count = 3

    var btnOk:UIButton?                 //确定
    var btnCancle:UIButton?             //取消
    var topView:UIView?                 //頂部視圖
    @objc var dataPicker:UIPickerView?  //資料選擇器

    //MARK: - override func
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor.white

        //MARK: 頂部視圖
        x = 0
        y = 0
        w = frame.size.width
        h = 45
        var rect = CGRect.init(x: x, y: y, width: w, height: h)
        topView = UIView.init(frame: rect)
        topView?.backgroundColor = UIColor.init().fromHexInt(0xfafafa, andAlpha: 1.0)
        self.addSubview(topView!)

        //MARK:關閉
        x = 0
        y = 0
        w = 80
        h = topView!.frame.size.height
        rect = CGRect.init(x: x, y: y, width: w, height: h)
        btnCancle = UIButton.init(frame: rect)
        btnCancle?.setTitle("關閉", for: .normal)
        btnCancle?.setTitleColor(UIColor.init().fromHexInt(0x007aff, andAlpha: 1.0), for: .normal)
        btnCancle?.titleLabel?.font = UIFont.init(name: "PingFangSC-Regular", size: 14)
        btnCancle?.addTarget(self, action: #selector(btnClose(sender:)), for: .touchUpInside)
        self.topView?.addSubview(btnCancle!)

        //MARK:完成
        w = 80
        h = topView!.frame.size.height
        x = topView!.frame.size.width - w
        rect = CGRect.init(x: x, y: y, width: w, height: h)

        btnOk = UIButton.init(frame: rect)
        btnOk?.setTitle("完成", for: .normal)
        btnOk?.setTitleColor(UIColor.init().fromHexInt(0x007aff, andAlpha: 1.0), for: .normal)
        btnOk?.titleLabel?.font = UIFont.init(name: "PingFangSC-Regular", size: 14)
        btnOk?.addTarget(self, action: #selector(btnFinishAction(sender:)), for: .touchUpInside)
        self.topView?.addSubview(btnOk!)

        //MARK:資訊選擇視圖
        y = self.topView!.frame.size.height + self.topView!.frame.origin.y
        h = frame.size.height - y
        x = 0
        w = frame.size.width
        rect = CGRect.init(x: x, y: y, width: w, height: h)

        dataPicker = UIPickerView.init(frame: rect)
        dataPicker!.showsSelectionIndicator = true
        dataPicker!.backgroundColor = UIColor.clear
        dataPicker!.delegate = self
        dataPicker!.dataSource = self
        dataPicker!.tintColor = UIColor.white
        self.addSubview(dataPicker!)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    
    //MARK: - 重新整理
    /**
     * @params isConstraint Bool 強制重新整理
     */
    @objc func reload(isConstraint:Bool = false){
        //設定對應的選項
        var index:Int? = CountryCityModel.Province.index { return $0 == self.province }
        if index == nil { index = 0 }
        if isConstraint { index = 0 }
        dataPicker?.selectRow(index!, inComponent: 0, animated: true)
        CountryCityModel.current_province = CountryCityModel.Province[index!]
        dataPicker?.reloadComponent(1)
        

        index = CountryCityModel.City.index { return $0 == self.city }
        if index == nil { index = 0 }
        if isConstraint { index = 0 }
        dataPicker?.selectRow(index!, inComponent: 1, animated: true)
        CountryCityModel.current_city = CountryCityModel.City[index!]
        dataPicker?.reloadComponent(2)
        
        if list_cell_count > 2 {
            index = CountryCityModel.County.index { return $0 == self.county }
            if index == nil { index = 0 }
            if isConstraint { index = 0 }
            
            dataPicker?.selectRow(index!, inComponent: 2, animated: true)
            CountryCityModel.current_county = CountryCityModel.County[index!]
        }
    }


    //MARK: - 關閉
    @IBAction func btnClose(sender:UIButton) {
        if delegate != nil {
            delegate!.addressBoxCloseAction?(sender: sender)
        }
        print("關閉")
    }


    //MARK: - 完成
    @IBAction func btnFinishAction(sender:UIButton) {
        if delegate != nil {
            var strVal:String = String.init(format:"%@ %@",CountryCityModel.current_province,CountryCityModel.current_city)
            if list_cell_count > 2 {
                strVal = String.init(format:"%@ %@ %@",CountryCityModel.current_province,CountryCityModel.current_city,CountryCityModel.current_county)
            }
            delegate!.addressBoxFinishAction?(sender: sender, selectValue: strVal)
        }
        print("完成")
    }


    //MARK: - UIPickerViewDelegate,UIPickerViewDataSource
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return list_cell_count
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        //省份
        if component == 0 {
            return CountryCityModel.Province.count
        }
        //市
        else if component == 1 {
            return CountryCityModel.City.count
        }
        //縣
        else if component == 2 {
            return CountryCityModel.County.count
        }

        return 0
    }

    func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
        if component == 0 {
            return K_APP_WIDTH * 0.25
        }
        else if component == 1 {
            return K_APP_WIDTH * 0.35
        }
        else if component == 2 {
            return K_APP_WIDTH * 0.40
        }
        return 0.0
    }

    func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return 34
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        //省份
        if component == 0 && row < CountryCityModel.Province.count {
            return CountryCityModel.Province[row]
        }
        //城市
        else if component == 1 && row < CountryCityModel.City.count {
            return CountryCityModel.City[row]
        }
        //縣
        else if component == 2 && row < CountryCityModel.County.count {
            return CountryCityModel.County[row]
        }

        return "請選擇"
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        //省份
        if component == 0 && row < CountryCityModel.Province.count {
            if CountryCityModel.Province[row] == CountryCityModel.current_province {
                return
            }

            //更新市
            var index:Int = pickerView.selectedRow(inComponent: 0)
            if CountryCityModel.Province.count < index { index = 0 }
            CountryCityModel.current_province = CountryCityModel.Province[index]
            pickerView.reloadComponent(1)

            //更新縣
            CountryCityModel.current_city = CountryCityModel.City[pickerView.selectedRow(inComponent: 1)]
            pickerView.reloadComponent(2)
            
            if list_cell_count > 2 {
                index = pickerView.selectedRow(inComponent: 2)
                if CountryCityModel.County.count < index {index = 0}
                
                CountryCityModel.current_county = CountryCityModel.County[index]
            }
        }
        //市
        else if component == 1 && row < CountryCityModel.City.count {
            let index = pickerView.selectedRow(inComponent: 1)
            CountryCityModel.current_city = CountryCityModel.City[index]
            
            //更新縣
            if list_cell_count > 2 {
                pickerView.reloadComponent(2)
            }
        }
        //縣
        else if component == 2 && row < CountryCityModel.County.count {
            let index = pickerView.selectedRow(inComponent: 2)
            CountryCityModel.current_county = CountryCityModel.County[index]
        }
    }
}
           

3、在需要的地方調用 showAddressBox 方法(支援Obj-C)

具體使用參考如下:

//位址選擇
@property(nonatomic,strong) AddressBoxView *addressBoxView;

-(AddressBoxView *)addressBoxView{
    if (!_addressBoxView) {
        CGFloat h = K_APP_CUSTOM_BOX_HEIGHT;
        CGFloat y = K_APP_HEIGHT - h;
        if ([[UIDevice currentDevice] isiPhoneX]) {
            y -= K_APP_IPHONEX_BUTTOM;
        }
        
        CGRect rect = CGRectMake(0, y, K_APP_WIDTH, h);
        _addressBoxView = [[AddressBoxView alloc] initWithFrame:rect];
        _addressBoxView.delegate = self;
    }
    
    return _addressBoxView;
}

/**
 * 顯示位址選擇
 * @param strOldValue String 已經選中的位址,不存在可為nil(省市縣資料使用的 空格分割)
 * 在需要顯示位址的地方調用此方法即可
 */ 
-(void)showAddressBox:(NSString *)strOldValue{
    if (strOldValue && ![strOldValue isEqualToString:@""]) {
        NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@" "];
        NSArray *attTemp = [strOldValue componentsSeparatedByCharactersInSet:charSet];
        
        if (attTemp && [attTemp count] >= 2) {
            self.addressBoxView.province = [NSString stringWithFormat:@"%@",attTemp.firstObject];
            self.addressBoxView.city = [NSString stringWithFormat:@"%@",attTemp[1]];
            
            if ([attTemp count] >= 3) {
                self.addressBoxView.county = [NSString stringWithFormat:@"%@",attTemp.lastObject];
            }
            else{
                self.addressBoxView.county = @"";
            }
            
            [self.addressBoxView reloadWithIsConstraint:NO];
        }
    }
    else{
        [self.addressBoxView reloadWithIsConstraint:YES];
    }
    
    [self showListBox:self.addressBoxView];
}

/**
 * 該方法為附加方法,開源的自定義彈框元件
 * 具體使用參考:https://github.com/snail-z/zhPopupController.git
 */
-(void)showListBox:(UIView *)view{
    [self.zh_popupController setLayoutType:zhPopupLayoutTypeBottom];
    [self.zh_popupController setAllowPan:YES];
    [self.zh_popupController presentContentView:view];
}
           

4、通過實作 AddressBoxViewDelegate 可以關閉彈框 和 擷取 目前選中的位址資訊

以上資訊就是這些并附上效果圖,如有高見歡迎留言讨論

Swift版國内省市縣三級關聯