对于频繁重复的常数我该怎么办?

dbmrq

这似乎是一个非常简单的问题,但我找不到明确的答案。同样,它也不是专门针对swift或iO的,但是我是编程的新手,而swift是我唯一了解的语言,所以我不知道如何在更笼统的上下文中使用它。

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

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

let calendar = NSCalendar.currentCalendar()

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

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

在类,子类,扩展和计算属性的整个代码中一遍又一遍地定义那些calendaruser常量。

不过,这似乎有点愚蠢。我认为我应该能够calendar一劳永逸地进行定义,并在需要时使用它。因此,我的第一个想法是声明一个全局常量,但显然每个人都认为应不惜一切代价避免使用带有“全局”一词的任何东西。

所以我该怎么做?还有其他解决方案吗?我是否应该一遍又一遍地写同样的东西?

提前致谢,

丹尼尔

阿列克谢·皮丘科夫(Alexey Pichukov)

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

例如,在您的情况下:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我该怎么办呢?该怎么办?

来自分类Dev

Raspberry Pi我该怎么办?

来自分类Dev

意外升级,我该怎么办?

来自分类Dev

我该怎么办?教义关系

来自分类Dev

日期计数,我该怎么办?

来自分类Dev

对于隐藏而不是删除网站上的图像,我该怎么办?

来自分类Dev

对于缺少libgdk_pixbuf-2.0.la,我该怎么办?

来自分类Dev

对于“ 500 SSH无法理解”错误,我该怎么办?

来自分类Dev

对于内存不足和崩溃的机器,我该怎么办?

来自分类Dev

我不想在 swift 3 中重复相同的单词,我该怎么办?

来自分类Dev

我的属性太不讲究了,我该怎么办?

来自分类Dev

我想运行“ HttpAsyncTask” ...我该怎么办?

来自分类Dev

我单击了病毒链接-我该怎么办?

来自分类Dev

该消息怎么办?

来自分类Dev

GetComputerName返回对于我的计算机名称来说太短了...该怎么办?

来自分类Dev

对于不向.fits文件中不存在的标头抛出KeyError的程序,我该怎么办?

来自分类Dev

psn参数由MacOSX启动。我该怎么办?

来自分类常见问题

如果我的发行证书过期,该怎么办?

来自分类Dev

Medibuntu项目已经结束-现在我该怎么办?

来自分类Dev

HUP何时停止发送,我该怎么办?

来自分类Dev

如果我有几个重叠的QTimer,该怎么办

来自分类Dev

我打断了python:该怎么办?

来自分类Dev

删除实体时我该怎么办?MySQLIntegrityConstraintViolationException

来自分类Dev

位置0没有行...。我该怎么办..?

来自分类Dev

为了创建多个敌人实例,我该怎么办?

来自分类Dev

我的PC不支持ACPI,该怎么办?

来自分类Dev

用cont无法完成的callCC我该怎么办?

来自分类Dev

我需要更新数据库该怎么办?

来自分类Dev

使用xpath抓取时,我该怎么办?

Related 相关文章

  1. 1

    我该怎么办呢?该怎么办?

  2. 2

    Raspberry Pi我该怎么办?

  3. 3

    意外升级,我该怎么办?

  4. 4

    我该怎么办?教义关系

  5. 5

    日期计数,我该怎么办?

  6. 6

    对于隐藏而不是删除网站上的图像,我该怎么办?

  7. 7

    对于缺少libgdk_pixbuf-2.0.la,我该怎么办?

  8. 8

    对于“ 500 SSH无法理解”错误,我该怎么办?

  9. 9

    对于内存不足和崩溃的机器,我该怎么办?

  10. 10

    我不想在 swift 3 中重复相同的单词,我该怎么办?

  11. 11

    我的属性太不讲究了,我该怎么办?

  12. 12

    我想运行“ HttpAsyncTask” ...我该怎么办?

  13. 13

    我单击了病毒链接-我该怎么办?

  14. 14

    该消息怎么办?

  15. 15

    GetComputerName返回对于我的计算机名称来说太短了...该怎么办?

  16. 16

    对于不向.fits文件中不存在的标头抛出KeyError的程序,我该怎么办?

  17. 17

    psn参数由MacOSX启动。我该怎么办?

  18. 18

    如果我的发行证书过期,该怎么办?

  19. 19

    Medibuntu项目已经结束-现在我该怎么办?

  20. 20

    HUP何时停止发送,我该怎么办?

  21. 21

    如果我有几个重叠的QTimer,该怎么办

  22. 22

    我打断了python:该怎么办?

  23. 23

    删除实体时我该怎么办?MySQLIntegrityConstraintViolationException

  24. 24

    位置0没有行...。我该怎么办..?

  25. 25

    为了创建多个敌人实例,我该怎么办?

  26. 26

    我的PC不支持ACPI,该怎么办?

  27. 27

    用cont无法完成的callCC我该怎么办?

  28. 28

    我需要更新数据库该怎么办?

  29. 29

    使用xpath抓取时,我该怎么办?

热门标签

归档