【问题标题】:Is putting variables in the AppDelegate a workaround for static variable in Swift?将变量放在 AppDelegate 中是 Swift 中静态变量的解决方法吗?
【发布时间】:2014-11-15 23:31:32
【问题描述】:

由于 Swift 没有静态变量,而我正在尝试访问连接,那应该是静态的……将这个变量放在 App Delegate 中是一个合理的解决方案吗?

我在GitHub找到了这个sn-p:

func xmppStream () -> XMPPStream {
    return appDelegate().xmppStream!
}

那么当xmppStream() 在代码中被调用时,是返回原始实例,还是这里实际执行的操作?

【问题讨论】:

    标签: ios swift static


    【解决方案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 访问它,对吗?
    • 你可以这样做,是的。另一种方法(好吧,解决方法可能是更好的术语,直到他们添加静态类变量)是创建一个嵌套在类中的结构。我将在我的答案中添加该示例。
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多