Swift学习_协议和扩展的结合

本文介绍了Swift中协议扩展的三种方式:通过扩展采纳并实现协议、通过空扩展采纳协议及协议的扩展新增方法并实现。通过具体示例展示了如何在不修改原始类的基础上,为现有类型增加新的功能。

1.通过扩展采纳协议

// 定义一个Animal协议
protocol Animal{
    
    var getName:String{get}
}

// 定义一个Dog类,但是没有采纳Animal协议
class Dog{
    
    func shout() -> String{
        return "汪汪汪"
    }
}

// 通过扩展采纳并实现Animal协议
extension Dog:Animal{
    
    var getName:String{
        
        return "泰迪"
    }
}

let dog = Dog()

print("狗的叫声\(dog.shout())")
print("狗的名字\(dog.getName)")
复制代码

2.通过空扩展采纳协议

当一个类型已经符合了每个协议中的所有要求,却没有声明采纳该协议时,类型并不会自动采纳协议,此时,可以通过一个实现体为空的扩展(即空扩展)来采纳该协议

protocol Getname{
    
    var getName:String{get}
}

// 定义一个Student结构体
struct Student {
    
    var name:String
    var getName:String{
        return "这个学生的名字是\(name)"
    }
}

extension Student:Getname{}

let people = Student(name:"小明")
print(people.getName)
let student:Getname = people
print(student.getName)
复制代码

3.协议的扩展

protocol People{
    
    func drink() -> String
}

// 扩展新增方法并实现,此时必须实现
extension People{
    
    func eat() -> String {
        
        return "吃骨头"
    }
    func legs() -> Int {
        
        return 2
    }
}

class Teacher: People {
    
    func drink() -> String {
        return "喝水"
    }
}

let teacher = Teacher()
print(teacher.drink())
print(teacher.eat())
print("人类\(teacher.legs())条腿")
复制代码


代码已上传至git:
--> 传送门:Swift_基本语法

附录

#查看完整专栏《Swift学习》

有问题欢迎指正以及相互探讨 —— CoderSun

转载于:https://juejin.im/post/5a30e52451882540f3638a52

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值