什么时候在Swift中使用全局variables
我正在学习Swift和iOS应用开发,我想知道在哪些情况下(如果有的话),我应该在iOS应用中使用全局variables和常量。
全局variables是在任何函数,方法,闭包或types上下文之外定义的variables。 局部variables是在函数,方法或闭包上下文中定义的variables。
使用全局variables通常看起来不雅观,不可取(实际上不是大多数指南和教程推荐的),并在视图控制器之间传递数据我使用prepareForSegue(_: sender:)
方法。
然而在某些情况下,我认为使用全局variables会使代码变得更简单和更快。
例如,Applebuild议为每个格式模式存储NSDateFormatter
或NSNumberFormatter
,并且不要在每次需要时重新创build或更改。 在我开发学习语言的应用程序中,大多数视图控制器使用NSDateFormatter
和NSNumberFormatter
并为每个视图控制器创build一个新的视图可能不是一个好主意。 我可以将它传递给prepareForSegue,但我认为也许在这种情况下,最好使用一个全局variables来保存每个视图控制器可以使用的格式化器实例。
那么有没有我应该使用全局variables的情况?
每当你发现自己使用全球化的时候,你需要退后一步,认真思考数据是什么以及它与你的其他应用程序的关系。 很容易说你需要避免使用全局variables,最困难的部分就是知道这个场景的最佳select,即使是老牌的Cocoa开发人员也不同意。
在单例模式中 ,您创build一个类并将其全局存储在其中。 这通常是作为一种解决scheme提供的,因为这是最容易规定和遵循的,但是很多时候我不知道它是否是一个解决scheme。 在全球环绕一个class级并不会给你任何额外的保护。 毕竟,class级本身现在是一个全球性的实体。 我喜欢把Singleton模式想象成一种组织,分类和包含全局variables的方式,而不是避免使用全局variables。
单身人士应该保留给你的应用程序的tentpole像数据库或远程后端连接处理程序。 每个cocoa/ CocoaTouch应用程序都带有一个内置的Singleton,AppDelegate,在许多情况下,各种各样的东西可以去那里。
在许多情况下,“正确”的解决scheme是传递数据 ,比如在prepareForSegue:
类的视图控制器之间传递数据。 这在Andy Matuschak 2014年WWDC 高级会议上的高级iOS应用程序体系结构和模式中有很好的描述。 我同意你的看法,但这不适用于你的例子。 在你的例子中,你没有在两个视图之间传递相关的数据,你试图共享一个共同的设施来保存资源。
对于你的具体例子,我会使用单例或类似的模式。 对我来说有意义的一种方法是使用扩展将它们存储在相应的类中。 例如:
extension NSDateFormatter { static let newDateFormatter = NSDateFormatter() } // use it in your app like this: NSDateFormatter.newDateFormatter
就像评论者所说,这是一个意见问题。 另外请记住,斯威夫特还年轻,虽然它不可避免地从cocoa中借了很多,但是成语还在不断演变。