这似乎是一个非常简单的问题,但我无法找到明确的答案。它也不是特别关于swift或iOs,但我是编程和swift的新手是我所知道的唯一语言,所以我不知道如何用它来表达更一般的语境
我试图编写一个iOs应用程序,我发现自己在整个代码中多次定义了相同的常量。
我必须写这行约一百次,例如:
let calendar = NSCalendar.currentCalendar()
另一个例子是从持久存储中获取我唯一的User对象:
let realm = try! Realm()
let user = realm.objects(User).first!
我在类和子类以及扩展和计算属性的整个代码中反复定义了calendar
和user
常量。
calendar
并在我需要时使用它。所以我的第一个想法是宣布一个全局常数,但显然每个人都用“" global"应该不惜一切代价避免它。
那我该怎么办?还有其他解决方案吗?我应该一遍又一遍地写相同的东西吗?
提前致谢,
丹尼尔
答案 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
?