我正在iOS 8.0中开发应用程序。
通过以下链接,我正在分配位置对象, How can I get current location from user in iOS
我的目标是找出城市,州和国家名称,按当前位置。 使用此链接的答案,我得到Apple的地理编码器中使用的地方标记对象。 Get current city and country from CLGeocoder?
我得到的一切都好,只是
当我获得Country United States的州名时。 它给了我短代码,而不是给我完整的州名。
e.g。对于Alaska
,它给了我AK
对于Alabama
,它会给我AL
就像这是我的日志,
North Kingstown, RI, United States
我想要完整的州名,因为我想在我的项目中使用完整的州名。
我通过此代码获取州名称
NSString *stateName=myPlacemark.administrativeArea;
答案 0 :(得分:1)
因为,我只使用Apple的GeoCoder。它只给我一些美国国家的短代码。例如CA for California。
我使用谷歌但很难解析。 解决方案来自维基百科。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方法轻松地从短代码访问fullname。
答案 1 :(得分:1)
有@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 { $0.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
}
答案 2 :(得分:1)
带有美国州列表+ ISO代码的Swift 5枚举:
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)"
}
}
}