使用Extensions在多个文件上传播Swift类

时间:2015-11-19 18:08:29

标签: ios xcode class swift2

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

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

让我们说基本文件是 BaseClass.Swift (以及类 BaseClass ),我想将它扩展到 BaseClassExtension.swift ,我将以下内容放在 BaseClassExtension.swift

extension BaseClass {
    func doStuff() -> String {
        return myVariable
    }
}

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

我尝试了以下事项:

  • 将扩展程序公开
  • 将BaseClass设为公开
  • 公开宣传
  • (默认情况下,它们都是默认值(内部我猜?))

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

1 个答案:

答案 0 :(得分:4)

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

但是你可以这样做:

private(set) myVariable: String

因此可以从您的扩展程序访问getter,但(至少)setter仍然隐藏在此范围内。