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