在 Swift 中,扩展(extension)是一种强大的特性,可以为现有的类、结构体、枚举或协议添加新的功能。使用扩展可以在不修改原始类型的情况下,为它们添加新的方法、计算属性、下标等功能。
为类、结构体、枚举添加新功能
通过扩展,可以为已有的类、结构体、枚举添加新的功能,例如方法、计算属性、下标等。扩展的语法如下:
extension SomeType {// 添加新的功能
}
示例:
// 为 Int 类型添加一个计算属性,用于计算它的平方值
extension Int {var squared: Int {return self * self}
}let number = 5
print(number.squared) // 输出 25
实现协议
扩展还可以用来为类、结构体、枚举实现协议,这样就可以为现有类型添加协议所要求的功能。
示例:
protocol FullyNamed {var fullName: String { get }
}struct Person: FullyNamed {var fullName: String
}extension Person {init(firstName: String, lastName: String) {self.fullName = firstName + " " + lastName}
}let john = Person(firstName: "John", lastName: "Doe")
print(john.fullName) // 输出 "John Doe"
注意事项
- 扩展可以添加新的功能,但不能重写已经存在的功能。
- 扩展可以为协议中的属性添加默认实现,但不能为存储属性添加属性观察器。
- 如果扩展为一个协议添加新的功能,那么只有遵循该协议的类型才能使用这些功能。
通过扩展,我们可以为现有的类、结构体、枚举或协议添加新的功能,而无需修改它们的源代码。这使得我们可以更加灵活地扩展现有类型的功能,使代码更加清晰和可维护。