以下是关于 Swift 扩展的基本信息和使用方法:
扩展基本语法
扩展使用 extension 关键字,并且可以在扩展中为类型添加新的功能:
// 为 Double 类型添加计算平方的方法
extension Double {
func squared() -> Double {
return self * self
}
}
let number: Double = 3.0
let squaredNumber = number.squared() // 调用扩展中新增的方法
print(squaredNumber) // 输出 9.0
扩展属性
扩展还可以为已有类型添加计算属性或存储属性:
// 为 Int 类型添加计算属性,表示是否为偶数
extension Int {
var isEven: Bool {
return self % 2 == 0
}
}
let someNumber: Int = 4
print(someNumber.isEven) // 输出 true
扩展构造器
扩展可以为类、结构体或枚举添加新的构造器:
struct Point {
var x: Double
var y: Double
}
// 为 Point 结构体添加一个接受整数坐标的构造器
extension Point {
init(integerX: Int, integerY: Int) {
self.x = Double(integerX)
self.y = Double(integerY)
}
}
let integerPoint = Point(integerX: 5, integerY: 10)
print(integerPoint.x, integerPoint.y) // 输出 5.0 10.0
扩展方法
扩展可以为已有类型添加新的实例方法和类型方法:
// 为数组添加一个返回数组中所有偶数的方法
extension Array where Element: Numeric {
func evenElements() -> [Element] {
return self.filter { $0 % 2 == 0 }
}
}
let numbers: [Int] = [1, 2, 3, 4, 5, 6]
let evenNumbers = numbers.evenElements()
print(evenNumbers) // 输出 [2, 4, 6]
扩展协议
扩展可以为协议添加新的方法、属性和下标脚本:
protocol CanFly {
func fly()
}
struct Bird: CanFly {
func fly() {
print("Bird is flying")
}
}
// 为 CanFly 协议添加一个默认实现的方法
extension CanFly {
func soar() {
print("Soaring through the sky")
}
}
let bird = Bird()
bird.fly() // 输出 "Bird is flying"
bird.soar() // 输出 "Soaring through the sky"
扩展限制
扩展可以在限制条件下应用,例如,只对特定的操作系统、特定的类别、遵循特定协议等进行扩展:
// 仅在 iOS 平台上应用扩展
#if os(iOS)
extension UIView {
func fadeIn() {
// 实现淡入效果
}
}
#endif
以上是一些关于 Swift 扩展的基本用法。扩展提供了一种灵活的方式来组织和增强代码,使得类型的功能可以通过扩展进行模块化扩展。
转载请注明出处:http://www.pingtaimeng.com/article/detail/14438/Swift