Swift 扩展
在本教程中,我们将通过实例了解 Swift 扩展。
在 Swift 中,我们可以向现有类型添加新功能。我们可以使用扩展来实现这一点。
我们使用 extension
关键字来声明扩展。例如,
// class definition
class Temperature {
...
}
// extension of Temperature class
extension Temperature {
// add new methods
}
在这里,我们使用 extension
关键字创建了 Temperature
类的扩展。
现在,在扩展中,我们可以向 Temperature
添加新功能。
实例:swift 扩展
// class definition
class Temperature {
var celsius: Double = 0
func setTemperature(celsius: Double) {
self.celsius = celsius
print("Celsius:", celsius)
}
}
// declare an extension
extension Temperature {
// add a new method to Temperature class
func convert() {
var fahrenheit = (celsius * 1.8) + 32
print("Fahrenheit:", fahrenheit)
}
}
// class initialization
let temp1 = Temperature()
temp1.setTemperature(celsius: 16)
// access extension method using class object
temp1.convert()
结果如下:
Celsius: 16.0
Fahrenheit: 60.8
在上面的实例中,我们创建了 Temperature
类的扩展。
extension Temperature {
// add a new method to Temperature class
func convert() {
var fahrenheit = (celsius * 1.8) + 32
...
}
}
此扩展将以下功能添加到 Temperature
:
convert()
- 一种简单地将温度从摄氏度转换为华氏度的方法。fahrenheit
- 在convert()
内声明的变量,用于存储转换结果。
然后,我们创建了一个名为 Temperature
的 temp1
对象,并使用它访问在扩展内创建的方法。
// access extension method using class object
temp1.convert()
注意:类内定义的属性(如
celsius
)也可以在扩展内使用。扩展中的计算属性
在 Swift 中,我们无法在扩展中添加存储的属性。例如,
extension Circle {
// stored property
var radius: Int // error code
}
然而,Swift 让我们可以将 计算属性 添加到扩展中。例如,
extension Circle {
// computed property
var area: Double {
...
}
}
这里,area
是在 extension
主体中定义的计算属性。
实例:扩展中的计算属性
class Circle {
var radius: Double = 0
}
extension Circle {
// define computed property
var area: Double {
return 3.14 * radius * radius
}
}
let circle1 = Circle()
circle1.radius = 5
print("Area:", circle1.area)
结果如下:
Area: 78.5
在上面的实例中,我们创建了 Circle
类的扩展,其中定义了一个名为 area
的计算属性。
此特性基于 radius
半径值计算圆的面积。
var area: Double {
return 3.14 * radius * radius
}
协议扩展
在 Swift 中,我们还可以扩展协议。例如,
// protocol definition
protocol Brake {
func applyBrake()
}
// extend protocol
extension Brake {
func applyBrake() {
print("Brake Applied")
}
}
// define class that conforms Brake
class Car: Brake {
var speed: Int = 0
}
let car1 = Car()
car1.speed = 61
print("Speed:", car1.speed)
// access extended protocol
car1.applyBrake()
结果如下:
Speed: 61
Brake Applied
在上面的实例中,我们创建了定义函数 applyBrake()
的协议 Brake
。
我们已经扩展了 Brake
协议,并在其中定义了 applyBrake()
函数体。
// extend protocol
extension Brake {
func applyBrake() {
print("Brake Applied")
}
}
现在,由于 Car
类符合 Brake
协议。
class Car: Brake {
...
}
我们可以使用 car1
对象访问扩展协议。
// access extended protocol
car1.applyBrake()