更改 UserDefaultLanguage Swift 个问题
Changing UserDefaultLanguage Swift problems
我是编程新手,我发现如何仅在 Objective C:
中更改 CLLocation
反向地理位置
NSMutableArray *userDefaultLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
[self.geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks, NSError* error){
MKPlacemark *placemarker = [placemarks objectAtIndex:0];
NSLog(@"%@",placemarker.locality);
}];
[[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];
而且我很难将它翻译成 Swift,这就是我设法做到的:
let userDefLang = UserDefaults.standard.array(forKey: "AppleLanguages")
var placeMark: CLPlacemark!
placeMark = placemarks?[0]
if let city = placeMark.addressDictionary!["State"] as? String
{
self.city = city as String
} else
{
self.city = "CONNECTION"
}
if let country = placeMark.addressDictionary!["Country"] as? String
{
self.country = country as String
} else
{
self.country = "FAILED"
}
self.currentCity.name = ("\(self.city), \(self.country)" as String)
但我不知道如何正确设置语言而不是将其改回,请帮助我...我无法做到的是:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
和
[[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];
更新
我已经按照您所说的进行了更改(我希望我理解如何)这是代码:
func convertLocationToCity()
{
if let defaultLanguage = UserDefaults.standard.array(forKey: "AppleLanguages") as? [String]
{
let newLang = ["en"]
UserDefaults.standard.set(newLang, forKey: "AppleLanguages")
let geoCoder = CLGeocoder()
let userLocation = CLLocation(latitude: self.lat, longitude: self.long)
geoCoder.reverseGeocodeLocation(userLocation, completionHandler:
{
(placemarks, error) -> Void in
var placeMark: CLPlacemark!
placeMark = placemarks?[0]
var cityRef = ""
var countryRef = ""
if let city = placeMark.addressDictionary!["State"] as? String
{
cityRef = city as String
} else
{
cityRef = ""
}
if let country = placeMark.addressDictionary!["Country"] as? String
{
countryRef = country as String
} else
{
countryRef = ""
}
self.currentCity = ("\(cityRef), \(countryRef)" as String)
if (self.didLoadCity == "" || self.didLoadCity == self.currentCity)
{
self.didLoadCity = ("\(cityRef), \(countryRef)" as String)
}
print("\(self.currentCity)")
self.cityNameLabel.text = self.currentCity
})
//After that set again defaultLanguage.
UserDefaults.standard.set(defaultLanguage, forKey: "AppleLanguages")
}
}
但仍然没有变化,它以 phone 的默认语言向我显示响应。
为此,您可以像这样在 UserDefaults
对象上使用 array(forKey:)
和 set(_:forKey:)
。
if let defaultLanguage = UserDefaults.standard.array(forKey: "AppleLanguages") as? [String] {
let newLang = ["en"]
UserDefaults.standard.set(newLang, forKey: "AppleLanguages")
//Perform your Task here
//After that set again defaultLanguage.
UserDefaults.standard.set(defaultLanguage, forKey: "AppleLanguages")
}
我是编程新手,我发现如何仅在 Objective C:
中更改CLLocation
反向地理位置
NSMutableArray *userDefaultLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
[self.geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks, NSError* error){
MKPlacemark *placemarker = [placemarks objectAtIndex:0];
NSLog(@"%@",placemarker.locality);
}];
[[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];
而且我很难将它翻译成 Swift,这就是我设法做到的:
let userDefLang = UserDefaults.standard.array(forKey: "AppleLanguages")
var placeMark: CLPlacemark!
placeMark = placemarks?[0]
if let city = placeMark.addressDictionary!["State"] as? String
{
self.city = city as String
} else
{
self.city = "CONNECTION"
}
if let country = placeMark.addressDictionary!["Country"] as? String
{
self.country = country as String
} else
{
self.country = "FAILED"
}
self.currentCity.name = ("\(self.city), \(self.country)" as String)
但我不知道如何正确设置语言而不是将其改回,请帮助我...我无法做到的是:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
和
[[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];
更新
我已经按照您所说的进行了更改(我希望我理解如何)这是代码:
func convertLocationToCity()
{
if let defaultLanguage = UserDefaults.standard.array(forKey: "AppleLanguages") as? [String]
{
let newLang = ["en"]
UserDefaults.standard.set(newLang, forKey: "AppleLanguages")
let geoCoder = CLGeocoder()
let userLocation = CLLocation(latitude: self.lat, longitude: self.long)
geoCoder.reverseGeocodeLocation(userLocation, completionHandler:
{
(placemarks, error) -> Void in
var placeMark: CLPlacemark!
placeMark = placemarks?[0]
var cityRef = ""
var countryRef = ""
if let city = placeMark.addressDictionary!["State"] as? String
{
cityRef = city as String
} else
{
cityRef = ""
}
if let country = placeMark.addressDictionary!["Country"] as? String
{
countryRef = country as String
} else
{
countryRef = ""
}
self.currentCity = ("\(cityRef), \(countryRef)" as String)
if (self.didLoadCity == "" || self.didLoadCity == self.currentCity)
{
self.didLoadCity = ("\(cityRef), \(countryRef)" as String)
}
print("\(self.currentCity)")
self.cityNameLabel.text = self.currentCity
})
//After that set again defaultLanguage.
UserDefaults.standard.set(defaultLanguage, forKey: "AppleLanguages")
}
}
但仍然没有变化,它以 phone 的默认语言向我显示响应。
为此,您可以像这样在 UserDefaults
对象上使用 array(forKey:)
和 set(_:forKey:)
。
if let defaultLanguage = UserDefaults.standard.array(forKey: "AppleLanguages") as? [String] {
let newLang = ["en"]
UserDefaults.standard.set(newLang, forKey: "AppleLanguages")
//Perform your Task here
//After that set again defaultLanguage.
UserDefaults.standard.set(defaultLanguage, forKey: "AppleLanguages")
}