扩展是 Swift 编程语言的最佳特性之一,它们有多个用例。一旦你掌握了它们,你就可以想出一些非常好的和易于理解的代码。一些用例是:
1。扩展系统类型
使用 Swift,您可以使用任何系统类型,例如 Int 或 String,以使某些代码更具可读性并获得更多您必须自己编写的功能。例如,查看以下重复某些任务多次的代码:
extension Int {
func repetitions(task: () -> Void) {
for _ in 0..<self {
task()
}
}
}
您可以扩展Int 并使其更具可读性,而不是为任务重复创建单独的函数并管理多个参数:
3.repetitions({
print("Hello!")
})
// Hello!
// Hello!
// Hello!
每个人都同意这是您可以创建的最简单、最干净的代码。
2。 让凌乱的代码可读
检查以下定义:
class MyTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate {
// a lot of functions
}
如果你把所有东西都放在一个类或结构中,代码会在某一时刻变得混乱,并且很难跟踪哪个方法属于哪个协议或类。相反,你应该使用这个:
class MyTableViewController: UIViewController {
}
extension MyTableViewController: UITableViewDelegate {
}
extension MyTableViewController: UITableViewDataSource {
}
// etc...
3。协议扩展
协议扩展是 Swift 最酷的特性之一。它们允许向采用您正在扩展的协议的任何类添加方法。例如让我们扩展CollectionType 协议。
extension CollectionType {
func printAll() {
print(self)
}
}
现在您可以在任何采用此协议的结构上使用方法printAll()!其中一些是原生 Swift 类型,例如 Array、Dictionary 或 Set。
这些只是扩展的一些主要用途,它们可以做更多的事情:
- 添加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新的初始化器
- 定义下标
- 定义和使用新的嵌套类型
- 使现有类型符合协议