这似乎是一个非常简单的问题,但我找不到明确的答案。此外,它并不是专门针对 swift 或 iOs,但我是编程新手,而 swift 是我唯一了解的语言,所以我不知道如何用更一般的上下文来表达它。
我正在尝试编写一个 iOs 应用程序,但我发现自己在我的代码中多次定义了相同的常量。
这行我一定写了大约一百遍,例如:
let calendar = NSCalendar.currentCalendar()
另一个例子是从它的持久存储中获取我唯一的用户对象:
let realm = try! Realm()
let user = realm.objects(User).first!
我在类、子类、扩展和计算属性的整个代码中一遍又一遍地定义那些calendar
和user
常量。
不过,这似乎有点愚蠢。我想我应该能够一劳永逸地定义 calendar
并在需要时使用它。所以我的第一个想法是声明一个全局常量,但显然每个人都认为应该不惜一切代价避免使用“全局”一词。
那我该怎么办呢?还有其他解决方案吗?我应该一遍又一遍地写同样的东西吗?
提前致谢
丹尼尔
最佳答案
在许多不同的情况下,最好使用不同的方法。
例如你的情况:
let calendar = NSCalendar.currentCalendar()
currentCalendar
是一个静态方法,它已经返回指向您将使用的对象的指针。而且你不需要将它设置为一些常量以用于简单的情况:
print(NSCalendar.currentCalendar().calendarIdentifier)
当您需要经常引用对象时,在代码中使用较短的名称通常会更好,并且此代码看起来更具可读性:
print(calendar.calendarIdentifier)
如果你有经常在不同地方的应用程序中使用的功能,你可以直接把它做成静态方法,而不是每次调用它时都创建这个类的对象:
class NetworkConnection {
class func getDataFromServet(completion block: (data: SomeType) -> Void) {
...
}
}
并在不创建对象的情况下使用它,例如:
NetworkConnection.getDataFromServer(completion: {(data: SomeType) -> Void in
...
})
如果你需要在很多地方使用创建的对象,最好的解决方案是不要将其设为全局或单例实例,而是将指向它的指针传递给你需要使用它的对象。这使代码更具可读性,例如通过查看 init
方法的输入参数,任何人都可以立即了解哪些对象使用此类进行工作。而且这个类更容易从一个单独的模块中的项目中获取并连接到另一个项目。那时,如果使用单例实例,类的接口(interface)不清楚它可以使用什么,这会导致代码混淆。这适用于全局对象。
关于ios - 对于频繁重复的常量,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33573774/