在 Swift 中使用扩展

use of extensions in Swift

我正在查看一些来自 Apple Developer 示例项目的示例代码,我发现这种模式重复了很多次。

所以有一个视图控制器...

class CameraViewController: UIViewController {
}

然后总会有一些扩展,例如:

extension CameraViewController: AVCaptureVideoDataOutputSampleBufferDelegate {
   ...
}

我想知道为什么要这样做?这是为了允许初始定义的可重用性 类 还是有其他原因?

如果在同一个文件中,只是为了代码组织的目的。将与特定协议相关的方法放在一起很方便。这是一个很好的提醒,不要更改这些方法的名称,它清楚地说明了为什么一个方法似乎永远不会被调用(例如,因为它是从 Apple 代码中调用的)。

如果它在另一个文件中,有时会简化 code-reuse,特别是如果非常 general-purpose 的类型符合非常 app-specific 的协议。但即使在那种情况下,它也可能只是出于组织目的,使文件更小,或者只是为了表达您认为这是 non-core 功能。

但总的来说,扩展是一种非常常见的 general-purpose 工具,只要您觉得它们方便且有意义,您就可以使用它们。

贡献答案,这是为了更好地组织你的项目,而不是这样 ViewController:

extension CameraViewController: AVCaptureVideoDataOutputSampleBufferDelegate, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate, CLLocationManagerDelegate, ... {
    ...
}

不仅使用 Apple 协议,而且将您的方法组织到扩展中。

例如,我将我的主要 ViewController 与视图创建方法组织到代码中,如下所示:

extension MainViewController {
    private func createView() {
    ...
    }

   private func configureConstraints() {
    ...
    }
}