六、扩展协议
1.使用扩展(extension)扩展类型的属性
//扩展:就是向一个已有的类、结构体或枚举类型添加新的能力。扩展可以对一个类型添加新的功能,但是不能重写已有的功能。
//关键字:extension
extension Int //对计算型属性进行扩展
{
var double: Int
{
return self * 2
}
var triple: Int
{
return self * 3
}
var fourfold: Int
{
return self * 4
}
var half: Double
{
return Double(self) / 2.0
}
}
2.double
2.triple
2.fourfold
2.half
2.使用extension对方法进行扩展
struct Point //定义结构体
{
var x = 0.0
var y = 0.0
}
extension Point //对结构体进行扩展
{
//添加扩展方法
func distance(anotherPoint: Point) -> Double
{ //计算与另一个点之间的距离
let distanceX = anotherPoint.x - self.x
let distanceY = anotherPoint.y - self.y
return sqrt(distanceX * distanceX + distanceY * distanceY)
}
}
let startPoint = Point(x: 0.0, y: 0.0)
let endPoint = Point(x: 10.0, y: 10.0)
startPoint.distance(anotherPoint: endPoint)
3.使用协议(protocol)进行方法的声明
//协议规定了用来实现某个功能所需的方法和属性。协议能够被类、结构体等具体实现(或遵守)。
//协议定义了一个方法的蓝图,属性和其它适合特定任务或功能的要求。定义协议与定义类、结构体和枚举非常相似。
protocol Walking
{
func walk()
}
protocol Eating
{
func eat()
}
//协议可以遵守另一个协议,将需要遵守的协议名称放在当前协议名称的后方,之间使用冒号进行分隔。
protocol Fighting: Walking
{
func fight()
}
//该类遵循两个协议,类名和协议名称之间仍然使用冒号进行分隔,而协议名称之间则使用逗号进行分隔。
class Animal : Fighting, Eating
{
var name = "Bird"
var age = 1
var damage = 10
func fight()
{
print("Fighting very hard!")
}
func eat()
{
print("Happily eating!")
}
func walk()
{
print("Working gracefully!")
}
func say()
{
print("I'm a dove of peace!")