将变量放在 AppDelegate 中是 Swift 中静态变量的解决方法吗?
Posted
技术标签:
【中文标题】将变量放在 AppDelegate 中是 Swift 中静态变量的解决方法吗?【英文标题】:Is putting variables in the AppDelegate a workaround for static variable in Swift? 【发布时间】:2014-11-15 23:31:32 【问题描述】:由于 Swift 没有静态变量,而我正在尝试访问连接,那应该是静态的……将这个变量放在 App Delegate 中是一个合理的解决方案吗?
我在GitHub找到了这个sn-p:
func xmppStream () -> XMPPStream
return appDelegate().xmppStream!
那么当xmppStream()
在代码中被调用时,是返回原始实例,还是这里实际执行的操作?
【问题讨论】:
【参考方案1】:这并不完全准确。 Swift CLASSES 没有静态变量,但结构体和枚举有!
struct Static
static var stream: XMPPStream?
如果您愿意,您可以稍后在代码中对其进行初始化。
Static.stream = XMPPStream()
如果你需要一个类的静态变量,另一种方法是在里面嵌套一个结构:
class RegularClass
struct Static
static var stream: XMPPStream?
//Other code
在其他地方你可以像...一样访问它
RegularClass.Static.stream ...
这可能是目前 Swift 中单例的最佳方法。并不是说我完全容忍这一点。
【讨论】:
这是他们在链接中所做的吗? 不。我认为该代码旨在成为如何集成框架的准系统展示,而不是真正的最佳实践示例。使用应用程序委托作为全局引用来粘贴东西是很糟糕的。 好的,谢谢。我现在理解了这个概念,只是试图理解结构。所以我制作了一个名为Static.swift
的单独文件并将我的静态变量放在那里。然后我可以初始化它并在任何地方以Static.stream
访问它,对吗?
你可以这样做,是的。另一种方法(好吧,解决方法可能是更好的术语,直到他们添加静态类变量)是创建一个嵌套在类中的结构。我将在我的答案中添加该示例。以上是关于将变量放在 AppDelegate 中是 Swift 中静态变量的解决方法吗?的主要内容,如果未能解决你的问题,请参考以下文章
PhoneGap / Cordova 将 appdelegate 变量传递给 JS
将 UIViewControllers 放在其他 UIViewControllers 中是不好的做法吗?