0

我新的編程,我已經找到了如何更改CLLocation反向地理位置只有在目標C:更改UserDefaultLanguage斯威夫特問題

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"]; 

而且我有很大的困難,它在斯威夫特翻譯,這就是我能夠做到:

 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"]; 

UPDATE

像你告訴我,我所做的修改(我想我明白怎麼做)這是代碼:

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

} 

,但仍然沒有改變它顯示了手機默認語言的響應。

回答

1

對於這個,你可以使用array(forKey:)set(_:forKey:)UserDefaults這樣的對象。

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

謝謝你的回答,但有些東西不行,我更新了我的問題。 –

+1

'geoCoder.reverseGeocodeLocation('與閉包一起工作,所以它將以異步方式工作,所以UserDefaults.standard.set(defaultLanguage,forKey:「AppleLanguages」)'在完成任務後最終將該行放入該閉包中。意思是在這行後面'self.cityNameLabel.text = self.currentCity'。 –

+1

非常感謝),工作! –