在我的项目中,除非目前位于特定城市,否则用户无法转到下一个视图。所以这是我如何检查坐标城市
func fetchCountryAndCity(location: CLLocation, completion: @escaping (String, String) -> ()) {
CLGeocoder().reverseGeocodeLocation(location) { placemarks, error in
if let error = error {
print(error)
} else if let country = placemarks?.first?.country,
let city = placemarks?.first?.locality {
completion(country, city)
}
}
}
然后当用户点击获取我当前的位置时,我取坐标并检查:
fetchCountryAndCity(location: location) { country, city in
print("country:", country)
print("city:", city)
if city == "Riyadh" || city == "الرياض" || city == "리야드" || city == "Riyah" {
问题是我必须检查所有语言中城市的名称,因为城市名称的输出取决于设备的语言(正如我在测试期间发现的那样),这是不对的。除此之外还有什么方法可以检查所有语言的城市名称吗?
答案 0 :(得分:1)
您可以使用NSLocalizedString
以用户的语言获取利雅得的名称。这需要翻译您在一大堆语言中输入名称Riyadh。维基百科可以帮助您,而无需专业翻译。
另一种方法是获取您知道在城市内的地标,然后将该palcemark的城市与用户输入的内容进行比较。这样,两个城市名称都是用户的语言:
var riyadh: (country: String, city: String)?
override func viewDidLoad() {
// Riyadh's city hall
fetchCountryAndCity(location: CLLocation(latitude: 24.686212, longitude: 46.712462)) { country, city in
self.riyadh = (country, city)
}
}
当您检查从用户输入获得的地标时:
fetchCountryAndCity(location: CLLocation(latitude: 24.647212, longitude: 46.710844)) { country, city in
if let riyadh = self.riyadh, riyadh == (country, city) {
print("Hey it's Riyadh. Name in user locale is \(city)")
}
}
如果您在视图控制器的生命周期中很早就需要,riyadh
这种方法的烦恼可能无法初始化。