使用扩展将 Swift 类扩展到多个文件

Jer*_*nJK 4 xcode class ios swift2

我正在 Swift 中构建一个大类,我想将它分布在多个文件中,因为它变得太大而无法有效地工作。它不能被子类化,因为它只是一个具有许多功能的类。(我也许可以稍后优化它并删除双重代码,但我仍然想实现这一点。)

为了更轻松地工作,我想使用扩展将类扩展到多个 Swift 文件中。我已经部分实现了;通过在同一文件中创建扩展来扩展基类。这没有任何问题。

假设基文件是BaseClass.Swift(和类BaseClass),我想将它扩展到BaseClassExtension.swift,我将以下内容放入BaseClassExtension.swift

extension BaseClass {
    func doStuff() -> String {
        return myVariable
    }
}
Run Code Online (Sandbox Code Playgroud)

BaseClass.swift 中,我有private var myVariable = "I am a string",但在BaseClassExtension.swift 中出现以下错误:使用未解析的标识符“myVariable”

我尝试了以下几件事:

  • 公开扩展
  • 公开 BaseClass
  • 两者都公开
  • (默认情况下,它们都是默认的(我猜是内部的?))

当我删除privatefrom 时myVariable,错误解决了,但我真的希望它是私有的,因为它可能永远不会直接从类外部访问。

Qby*_*yte 5

您必须在与您的类相同的文件中创建扩展名,因为 private 只限于此文件。

但是,您可以执行以下操作:

private(set) myVariable: String
Run Code Online (Sandbox Code Playgroud)

所以 getter 可以从你的扩展中访问,但(至少)setter 仍然隐藏在这个范围内。

  • @JeroenJK 无法在源文件之外访问它们。正如 Swift 书籍所说:“私有访问将实体的使用限制为它自己定义的源文件。使用私有访问来隐藏特定功能的实现细节。”。想象一下,如果这是可能的,您可以仅使用不应访问的扩展来访问数组和字符串的内部变量。 (3认同)