Swift 中的扩展(extension)是一种向现有类、结构体、枚举添加新功能的方法。扩展增加了一种扩展现有类型定义的方式,而不需要通过继承或修改原始类型的代码。
扩展可以添加计算属性、实例方法、类型方法、下标、构造函数以及遵循协议等。下面是一些使用扩展的示例。
- 扩展添加计算属性:
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
}
let oneMeter = 1.0.m
let tenKilometers = 10.0.km
- 扩展添加构造函数:
extension UIColor {
convenience init(hex: Int) {
let red = CGFloat((hex & 0xFF0000) >> 16) / 255.0
let green = CGFloat((hex & 0x00FF00) >> 8) / 255.0
let blue = CGFloat(hex & 0x0000FF) / 255.0
self.init(red: red, green: green, blue: blue, alpha: 1.0)
}
}
let purple = UIColor(hex: 0x800080)
- 扩展实现协议:
protocol FullName {
var firstName: String { get }
var lastName: String { get }
}
struct Person: FullName {
var firstName: String
var lastName: String
}
extension FullName {
var fullName: String {
return "\(firstName) \(lastName)"
}
}
let person = Person(firstName: "John", lastName: "Smith")
let fullName = person.fullName // John Smith
- 扩展添加下标:
extension Array {
subscript(safe index: Int) -> Element? {
return indices.contains(index) ? self[index] : nil
}
}
let array = [1, 2, 3]
let firstItem = array[safe: 0] // 1
let fourthItem = array[safe: 3] // nil
扩展还可以用来添加实例方法、类型方法等。使用扩展能够让我们扩展其它人已经定义的类型,以提高类型的表达能力。