【问题标题】:Is putting your class inside a struct an acceptable way to namespace your class in Swift?将你的类放在一个结构中是在 Swift 中命名你的类的一种可接受的方式吗?
【发布时间】:2014-09-03 10:31:32
【问题描述】:

将你的类放在一个结构体中是一种可接受的方式来在 Swift 中命名你的类吗?我在编程指南中没有看到任何提及嵌套结构或结构类的内容。

struct TestNamespace {
    class Test {

    }
}

【问题讨论】:

  • “可接受”是一个定义松散的术语,存在争议。见:stackoverflow.com/q/24002821/how-do-you-use-namespaces-in-swift
  • 为什么要命名你的类?模块命名空间还不够吗?一个真实的例子可能会帮助我们弄清楚是否有更好的解决方案。
  • 使用动态框架(iOS 8+)所有类都属于它们的模块命名空间。

标签: swift


【解决方案1】:

我会(甚至更)高兴在 Swift 中使用 命名空间,因为它们有助于更精细地组织代码。如果您正在尝试使用 struct 作为命名空间,请考虑禁用它的构造:

struct PseudoNamespace {

    private init() {}

    //...

}

使用struct 比使用class 有一个优势:结构不支持继承,并且它需要使用final 修饰符的类。

这种模拟的一个显着缺点是无法“导入”这样的命名空间(如import PseudoNamespace.* 等),因为 Swift 允许导入模块,但不允许导入结构。

【讨论】:

  • 由于私有初始化或结构无法导入?
  • 私人init只否认建设。 Swift 允许导入 modules,但 struct 不是模块,因此该语言不允许导入它。您总是需要输入结构名称来寻址嵌套项,例如PseudoNamespace.NestedClass
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 2019-06-12
  • 2020-08-19
  • 2015-12-02
  • 2020-02-13
  • 1970-01-01
  • 2013-02-23
  • 2020-03-31
相关资源
最近更新 更多