Swift开发iOS开发iOS学习笔记

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

2017-07-21  本文已影响17人  CN_HarrySun
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

上一篇 下一篇

猜你喜欢

热点阅读