Appearance
Swift 入门(13):扩展
扩展(
extension) 可以给已有的类、结构体、枚举、协议 添加新功能,而无需修改原有代码。
这在实际开发中非常常用。
1. 给已有类型添加方法
swift
extension Int {
func squared() -> Int {
return self * self
}
}
print(5.squared()) // 252. 添加计算属性
swift
extension Double {
var km: Double { self * 1000 }
var cm: Double { self / 100 }
}
print(5.0.km) // 5000.0
print(120.0.cm) // 1.23. 初始化器扩展
扩展也能添加新的初始化方法。
swift
struct Point {
var x = 0.0, y = 0.0
}
extension Point {
init(value: Double) {
self.x = value
self.y = value
}
}
let p = Point(value: 3.0)
print(p) // Point(x: 3.0, y: 3.0)4. 协议 + 扩展
扩展能给协议提供 默认实现。
swift
protocol Greetable {
func greet()
}
extension Greetable {
func greet() {
print("你好,欢迎学习 Swift!")
}
}
struct Student: Greetable {}
let s = Student()
s.greet() // 你好,欢迎学习 Swift!5. 限制扩展
可以通过 where 限制扩展只对特定类型生效。
swift
extension Collection where Element: Comparable {
func isSorted() -> Bool {
return self == self.sorted()
}
}
print([1, 2, 3].isSorted()) // true
print([3, 1, 2].isSorted()) // false总结
- 扩展 可以给已有类型添加 方法、属性、初始化器。
- 协议扩展 能写默认实现,非常常用。
- 可以用
where限制扩展范围。 - 扩展不会覆盖原有实现,但能让代码更简洁。