在 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() {
...
}
}
我正在查看一些来自 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() {
...
}
}