Swift的extension关键字允许我们为现有的类、结构体、枚举或协议添加新的功能,就像是给一个已经建好的房子添加新的房间或设施。这种能力使得代码更加灵活,更容易维护,也更容易理解。
假设现在有一个整数,想要得到这个整数的平方。一般来说我们可能会写一个函数来完成这个任务:
func square(number: Int) -> Int {
return number * number
}
let number = 8
print(square(number: number)) // 输出 64
但是如果能直接在整数上调用一个方法来得到它的平方,那会更方便。这就是extension关键字的用武之地。
我们可以使用extension关键字为Int类型添加一个新的计算属性,像这样:
extension Int {
var squared: Int {
return self * self
}
}
let number = 8
print(number.squared) // 输出 64
现在,我们可以直接在任何整数上调用squared
属性来得到它的平方,就像这个属性是Int类型原本就有的一样。这就是extension的作用:它可以让我们为现有的类型添加新的功能,就像这些功能是原本就存在的一样。
extension关键字的用途不仅仅是添加计算属性,还可以使用它来添加新的方法,让一个已有类型符合某个协议,甚至添加新的初始化方法和下标。这使得代码更加灵活,更容易维护。
虽然extension关键字很强大,但是它也有一些限制。首先,不能使用extension来重写已有的方法或属性;其次,不能在extension中添加存储属性,只能添加计算属性。
网友评论