CLGeocoder:美国州名将以短代码形式出现

CLGeocoder: US state Names are coming as a short codes

我正在 iOS 8.0.

中开发应用程序

下面link,我正在分配位置对象, How can I get current location from user in iOS

我的目标是通过当前位置找出城市、州和国家名称。 使用此 link 的答案,我得到了 Apple 地理编码器中使用的地点标记对象。 Get current city and country from CLGeocoder?

我一切都好,只是

当我获取美国的州名时。 它给我简码,而不是完整的州名。

例如对于 Alaska 它给了我 AK 对于 Alabama 它给了我 AL

这是我的日志,

 North Kingstown, RI, United States

我想要完整的州名称,因为我想在我的项目中使用完整的州名称。

我正在通过此代码获取州名称,

 NSString *stateName=myPlacemark.administrativeArea;

因为,我只使用 Apple 的 GeoCoder。它只给我美国各州的短代码。例如加利福尼亚州的 CA。

我用过google,但解析起来相当困难。 解决方案来自维基百科。https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States

我已准备好以下来源以使用来自短代码的全名。

NSArray *arrayShortCodes=[[NSArray alloc] initWithObjects:@"AL",@"AK",@"AZ",@"AR",@"CA",@"CO",@"CT",@"DE",@"DC",@"FL",@"GA",@"HI",@"ID",@"IL",@"IN",@"IA",@"KS",@"KY",@"LA",@"ME",@"MD",@"MA",@"MI",@"MN",@"MS",@"MO",@"MT",@"NE",@"NV",@"NH",@"NJ",@"NM",@"NY",@"NC",@"ND",@"OH",@"OK",@"OR",@"PA",@"RI",@"SC",@"SD",@"TN",@"TX",@"UT",@"VT",@"VA",@"WA",@"WV",@"WI",@"WY",nil];
    NSArray *arrayFullNames=[[NSArray alloc] initWithObjects:@"Alabama",@"Alaska",@"Arizona",@"Arkansas",@"California",@"Colorado",@"Connecticut",@"Delaware",@"District of Columbia",@"Florida",@"Georgia",@"Hawaii",@"Idaho",@"Illinois",@"Indiana",@"Iowa",@"Kansas",@"Kentucky",@"Louisiana",@"Maine",@"Maryland",@"Massachusetts",@"Michigan",@"Minnesota",@"Mississippi",@"Missouri",@"Montana",@"Nebraska",@"Nevada",@"New Hampshire",@"New Jersey",@"New Mexico",@"New York",@"North Carolina",@"North Dakota",@"Ohio",@"Oklahoma",@"Oregon",@"Pennsylvania",@"Rhode Island",@"South Carolina",@"South Dakota",@"Tennessee",@"Texas",@"Utah",@"Vermont",@"Virginia",@"Washington",@"West Virginia",@"Wisconsin",@"Wyoming", nil];

     dictionaryStateNames =[[NSDictionary alloc] initWithObjects:arrayFullNames forKeys:arrayShortCodes];

现在,我们可以使用 NSDictionary 的 valueForKey 方法轻松地从短代码中获取全名。

@Arpit B Parekh 的回答有Swift 3 个版本:

let stateCodes = ["AL","AK","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]
let fullStateNames = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","District of Columbia","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]

func shortStateName(_ state:String) -> String {
    let lowercaseNames = fullStateNames.map { [=10=].lowercased() }
    let dic = NSDictionary(objects: stateCodes, forKeys: lowercaseNames as [NSCopying])
    return dic.object(forKey:state.lowercased()) as? String ?? state}

func longStateName(_ stateCode:String) -> String {
    let dic = NSDictionary(objects: fullStateNames, forKeys:stateCodes as [NSCopying])
    return dic.object(forKey:stateCode) as? String ?? stateCode
}

Swift 5 枚举美国各州列表 + ISO 代码:

https://gist.github.com/SergLam/a252dd01324b5e2c04ecbe79cbb6b8fb

// https://en.wikipedia.org/wiki/List_of_U.S._state_and_territory_abbreviations
// https://en.wikipedia.org/wiki/ISO_3166-2

// NOTE: - Last two symbols from ISO 3166-2 state code
enum USAState: Int, CaseIterable {
    
    case alabama = 1
    case alaska = 2
    case arizona = 3
    case arkansas = 4
    case california = 5
    case colorado = 6
    case connecticut = 7
    case delaware = 8
    case districtOfColumbia = 9
    case florida = 10
    case georgia = 11
    case hawaii = 12
    case idaho = 13
    case illinois = 14
    case indiana = 15
    case iowa = 16
    case kansas = 17
    case kentucky = 18
    case louisiana = 19
    case maine = 20
    case maryland = 21
    case massachusetts = 22
    case michigan = 23
    case minnesota = 24
    case mississippi = 25
    case missouri = 26
    case montana = 27
    case nebraska = 28
    case nevada = 29
    case newHampshire = 30
    case newJersey = 31
    case newMexico = 32
    case newYork = 33
    case northCarolina = 34
    case northDakota = 35
    case ohio = 36
    case oklahoma = 37
    case oregon = 38
    case pennsylvania = 39
    case rhodeIsland = 40
    case southCarolina = 41
    case southDakota = 42
    case tennessee = 43
    case texas = 44
    case utah = 45
    case vermont = 46
    case virginia = 47
    case washington = 48
    case westVirginia = 49
    case wisconsin = 50
    case wyoming = 51
    
    var displayName: String {
        switch self {
        case .alabama:
            return "Alabama"
        case .alaska:
            return "Alaska"
        case .arizona:
            return "Arizona"
        case .arkansas:
            return "Arkansas"
        case .california:
            return "California"
        case .colorado:
            return "Colorado"
        case .connecticut:
            return "Connecticut"
        case .delaware:
            return "Delaware"
        case .districtOfColumbia:
            return "District of Columbia"
        case .florida:
            return "Florida"
        case .georgia:
            return "Georgia"
        case .hawaii:
            return "Hawaii"
        case .idaho:
            return "Idaho"
        case .illinois:
            return "Illinois"
        case .indiana:
            return "Indiana"
        case .iowa:
            return "Iowa"
        case .kansas:
            return "Kansas"
        case .kentucky:
            return "Kentucky"
        case .louisiana:
            return "Louisiana"
        case .maine:
            return "Maine"
        case .maryland:
            return "Maryland"
        case .massachusetts:
            return "Massachusetts"
        case .michigan:
            return "Michigan"
        case .minnesota:
            return "Minnesota"
        case .mississippi:
            return "Mississippi"
        case .missouri:
            return "Missouri"
        case .montana:
            return "Montana"
        case .nebraska:
            return "Nebraska"
        case .nevada:
            return "Nevada"
        case .newHampshire:
            return "New Hampshire"
        case .newJersey:
            return "New Jersey"
        case .newMexico:
            return "New Mexico"
        case .newYork:
            return "New York"
        case .northCarolina:
            return "North Carolina"
        case .northDakota:
            return "North Dakota"
        case .ohio:
            return "Ohio"
        case .oklahoma:
            return "Oklahoma"
        case .oregon:
            return "Oregon"
        case .pennsylvania:
            return "Pennsylvania"
        case .rhodeIsland:
            return "Rhode Island"
        case .southCarolina:
            return "South Carolina"
        case .southDakota:
            return "South Dakota"
        case .tennessee:
            return "Tennessee"
        case .texas:
            return "Texas"
        case .utah:
            return "Utah"
        case .vermont:
            return "Vermont"
        case .virginia:
            return "Virginia"
        case .washington:
            return "Washington"
        case .westVirginia:
            return "West Virginia"
        case .wisconsin:
            return "Wisconsin"
        case .wyoming:
            return "Wyoming"
        }
    }
    
    var stateCode: String {
        switch self {
        case .alabama:
            return "AL"
        case .alaska:
            return "AK"
        case .arizona:
            return "AZ"
        case .arkansas:
            return "AR"
        case .california:
            return "CA"
        case .colorado:
            return "CO"
        case .connecticut:
            return "CT"
        case .delaware:
            return "DE"
        case .districtOfColumbia:
            return "DC"
        case .florida:
            return "FL"
        case .georgia:
            return "GA"
        case .hawaii:
            return "HI"
        case .idaho:
            return "ID"
        case .illinois:
            return "IL"
        case .indiana:
            return "IN"
        case .iowa:
            return "IA"
        case .kansas:
            return "KS"
        case .kentucky:
            return "KY"
        case .louisiana:
            return "LA"
        case .maine:
            return "ME"
        case .maryland:
            return "MD"
        case .massachusetts:
            return "MA"
        case .michigan:
            return "MI"
        case .minnesota:
            return "MN"
        case .mississippi:
            return "MS"
        case .missouri:
            return "MO"
        case .montana:
            return "MT"
        case .nebraska:
            return "NE"
        case .nevada:
            return "NV"
        case .newHampshire:
            return "NH"
        case .newJersey:
            return "NJ"
        case .newMexico:
            return "NM"
        case .newYork:
            return "NY"
        case .northCarolina:
            return "NC"
        case .northDakota:
            return "ND"
        case .ohio:
            return "OH"
        case .oklahoma:
            return "OK"
        case .oregon:
            return "OR"
        case .pennsylvania:
            return "PA"
        case .rhodeIsland:
            return "RI"
        case .southCarolina:
            return "SC"
        case .southDakota:
            return "SD"
        case .tennessee:
            return "TN"
        case .texas:
            return "TX"
        case .utah:
            return "UT"
        case .vermont:
            return "VT"
        case .virginia:
            return "VA"
        case .washington:
            return "WA"
        case .westVirginia:
            return "WV"
        case .wisconsin:
            return "WI"
        case .wyoming:
            return "WY"
        }
    }
    
    var isoStateCode: String {
        switch self {
        default:
            return "USA-\(self.stateCode)"
        }
    }
    
}