gpt4 book ai didi

ios - 仅以英文获取用户的城市

转载 作者:行者123 更新时间:2023-11-28 15:08:50 24 4
gpt4 key购买 nike

在我的项目中,用户无法转到下一个 View ,除非他们当前位于特定城市。所以这是我检查坐标城市的方法

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" {

问题是我必须检查所有语言的城市名称,因为城市名称的输出取决于设备的语言(正如我在测试期间发现的那样)而且它是不正确的。除了这个,还有什么方法可以检查所有语言的城市名称吗?

最佳答案

您可以使用 NSLocalizedString 以用户的语言获取利雅得的名称。这需要翻译您以多种语言输入利雅得这个名字。维基百科无需专业翻译人员即可助您一臂之力。

另一种方法是获取您知道位于城市内的地标,然后将该地标所在的城市与用户输入的城市进行比较。这样,两个城市名称都使用用户的语言:

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)")
}
}

如果您在 View Controller 生命周期的早期需要它,这种方法的烦恼是 riyadh 可能不会被初始化。

关于ios - 仅以英文获取用户的城市,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47987270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com