将全局设置存储在NSUserdefaults中

时间:2015-12-15 16:39:07

标签: swift

我希望我的应用程序拥有自己的设置(例如语言设置)。这些我想存储在NSUserdefaults中。阅读这些设置并在应用程序中使用它们的最佳方法是什么?

目前我使用全局变量,在Appdelegate中使用函数

进行设置
func readNSUserDefaults() {

    let userdefaults = NSUserDefaults.standardUserDefaults()
    pushFav          = userdefaults.valueForKey("pushFav")        == nil ? true : userdefaults.valueForKey("pushFav")!.boolValue
    pushVerband      = userdefaults.valueForKey("pushVerband")    == nil ? true : userdefaults.valueForKey("pushVerband")!.boolValue
    standortAuto     = userdefaults.valueForKey("standortAuto")   == nil ? true : userdefaults.valueForKey("standortAuto")!.boolValue
    languageSetting  = userdefaults.stringForKey("language")      ?? "auto"
    if languageSetting == "auto" {
        let autoLanguages = userdefaults.valueForKey("AppleLanguages")
        if let autoLanguages = autoLanguages as? [String] {
            print (autoLanguages)
            if autoLanguages.count > 0 {
                language = autoLanguages[0]
            }
        } else {
            language = "en-US"
        }
    }
}

每当更改设置时,我都会更新NSUserdefaults和全局变量。有没有更优雅的方式来做到这一点?和标志一样?

2 个答案:

答案 0 :(得分:0)

我的建议是:1。使用您存储的默认值的所有密钥创建枚举.2。只需在您需要的时间和地点查询默认系统所需的内容。忘记更新和读取全局值或创建单例,因为这两者都是项目不必要的膨胀。

// Make this available globally to your project
// This will ensure your keys are always correct.
enum DefaultsKeys: String {
    case PushFav
    case PushVerband
    case StandortAuto
    case Language
}

// Use this in your project where you need to use the default values
// It is only two lines, and will always be consistent.
let userdefaults = NSUserDefaults.standardUserDefaults()
let pushFav = userdefaults.boolForKey(DefaultsKeys.PushFav.rawValue)

答案 1 :(得分:0)

swift中的getter setters会帮助你在这里...... 参考:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

[object Geoposition]
  .coords [object Coordinates]
     .latitude
     .longitude
     .altitude
     .accuracy 
     .altitudeAccuracy
     .heading
     .speed
  .timestamp

这种情况应该有所帮助......希望如此!