Swift 扩展(extension)的使用详解和代码示范

36 min read

Swift 中的扩展(extension)是一种向现有类、结构体、枚举添加新功能的方法。扩展增加了一种扩展现有类型定义的方式,而不需要通过继承或修改原始类型的代码。

扩展可以添加计算属性、实例方法、类型方法、下标、构造函数以及遵循协议等。下面是一些使用扩展的示例。

  1. 扩展添加计算属性:
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
  1. 扩展添加构造函数:
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)
  1. 扩展实现协议:
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
  1. 扩展添加下标:
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

扩展还可以用来添加实例方法、类型方法等。使用扩展能够让我们扩展其它人已经定义的类型,以提高类型的表达能力。