处理 Notifications 和 UserDefaults 键名的字符串名称的最常用方法是什么

fs_*_*gre 1 encapsulation swift

我将在整个应用程序中使用一些字符串名称作为我的通知和用户默认名称。

我听说为了类型安全,将您的notification名称或UserDefaults键名称定义为静态字符串并使它们成为类或结构的一部分是一种很好的做法。

处理 Notification 和 UserDefault 名称的字符串名称的最常用方法是什么?

我曾考虑将它们作为全局变量放在我的 AppDelgate 类中,如下所示......

let MY_STRING_NAME = "My string name"

class AppDelegate: UIResponder, UIApplicationDelegate {}

/// Then just use MY_STRING_NAME in other classes. 
Run Code Online (Sandbox Code Playgroud)

或者

class SomeClass {
    let myStringName:String = "My string name"
}
/// Then use myClassInstance.myStringName
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

rma*_*ddy 5

UserDefaults 的一种选择是创建一个帮助程序类来隐藏您正在使用 UserDefaults 的事实。这使它在您的其余代码中看起来就像您正在使用一个简单的类及其属性一样。

像这样的东西:

class MyAppPreferences {
    static let shared = MyAppPreferences()

    private let highScoreKey = "highScore"
    var highScore: Int {
        get {
            return UserDefaults.standard.integer(forKey: highScoreKey)
        }
        set {
            UserDefaults.standard.set(newValue, forKey: highScoreKey)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在其他代码上,您可以这样做来设置它:

MyAppPreferences.shared.highScore = 100
Run Code Online (Sandbox Code Playgroud)

或阅读以下内容:

let score = MyAppPreferences.shared.highScore
Run Code Online (Sandbox Code Playgroud)

为应用中所需的每个应用首选项添加计算属性和私钥。这使您的其余代码更加清晰。

并且由于某种原因,您需要在将来更改一个或多个首选项的存储方式,您只需要在一个地方更改代码。

对于通知名称,您可以向通知关联的每个类添加常量。您可以在许多 iOS 类(例如 UIApplication、UITextView 等)中看到这种模式。

class SomeClass {
    static someClassEventNotification = NSNotification.Name("someUniqueName")
}
Run Code Online (Sandbox Code Playgroud)

  • 您不会为此使用自己的通知,也不会在应用程序委托中执行任何操作。只需让视图控制器注册现有的`UIApplication.willEnterForegroundNotification` 通知。 (2认同)