关于频繁重复的常数,我该怎么做?

时间:2015-11-06 18:58:32

标签: ios swift design-patterns

这似乎是一个非常简单的问题,但我无法找到明确的答案。它也不是特别关于swift或iOs,但我是编程和swift的新手是我所知道的唯一语言,所以我不知道如何用它来表达更一般的语境

我试图编写一个iOs应用程序,我发现自己在整个代码中多次定义了相同的常量。

我必须写这行约一百次,例如:

let calendar = NSCalendar.currentCalendar()

另一个例子是从持久存储中获取我唯一的User对象:

let realm = try! Realm()
let user = realm.objects(User).first!

我在类和子类以及扩展和计算属性的整个代码中反复定义了calendaruser常量。

但是,这似乎有些愚蠢。我想我应该能够一劳永逸地定义calendar并在我需要时使用它。所以我的第一个想法是宣布一个全局常数,但显然每个人都用“" global"应该不惜一切代价避免它。

那我该怎么办?还有其他解决方案吗?我应该一遍又一遍地写相同的东西吗?

提前致谢,

丹尼尔

2 个答案:

答案 0 :(得分:0)

在许多不同的情况下,最好地使用不同的方法。

例如在您的情况下:

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方法的输入参数,任何人都可以立即了解哪些对象使用此类进行工作。此类更容易从单独的模块中的项目中获取并连接到另一个项目。那时,如果使用单例实例,则类的接口不清楚它可以使用什么,这会导致代码混淆。这适用于全局对象。

答案 1 :(得分:-1)

如果您经常更改它,为什么不使用var代替let