返回
Swift 中的 Protocol 和 Opaque Types
IOS
2023-11-29 10:55:48
协议:行为蓝图
协议在 Swift 中充当接口,为特定任务或功能定义了一组方法、属性和其他要求。类、结构体和枚举遵循协议,并实现其指定的接口。这类似于 Java 中的接口或 C# 中的抽象类。
定义协议
用 protocol
定义一个协议:
protocol MyProtocol {
var name: String { get }
func doSomething()
}
协议只声明方法和属性的签名,而不会提供实现。遵循协议的类型必须提供这些成员的实现。
不透明类型:隐藏实现细节
不透明类型允许我们定义具有特定行为的类型,同时隐藏其底层实现细节。这通过使用 @objc
关键字实现,如下所示:
@objc protocol MyOpaqueProtocol {
var name: String { get }
func doSomething()
}
与普通协议不同,不透明协议的实现细节对外部代码不可见。这有助于封装和模块化,防止意外更改或滥用。
实现不透明类型
遵循不透明协议的类型必须提供实现,但实现细节对外部代码是隐藏的:
class MyOpaqueType: MyOpaqueProtocol {
private var _name: String
var name: String {
get { return _name }
}
func doSomething() {
// ...
}
}
协议和不透明类型的应用
协议和不透明类型在 Swift 开发中广泛应用,尤其是在以下场景:
- 可扩展性: 允许不同类型遵循同一协议,从而实现多态行为。
- 模块化: 促进代码组织和维护,通过将接口和实现分开。
- 可测试性: 支持模拟和存根,使单元测试更加容易。
- Objective-C 互操作性: 通过
@objc
协议实现与 Objective-C 代码的互操作性。
结论
协议和不透明类型是 Swift 中强大的工具,它们提供了一种定义接口和隐藏实现细节的方法。通过遵循这些原则,开发人员可以创建可扩展、模块化且可测试的代码,同时保持代码的清晰性和可维护性。