1.协议的基本使用
- 协议的格式
- 协议的定义方式与类,结构体,枚举的定义都非常相似
protocol SomeProtocol{//协议方法}
- 遵循协议格式
class SomeClass:SomeSuperClass,FirstProtocol,AnotherProtocol{
//类的内容
//实验协议中的方法
} - 类遵循协议
//如果遵循了协议,要求必须要实现协议里面所有的方法
//类遵循协议
class Person:Work{
func run(){
print("xxx")
}
}
- 枚举遵循协议
enum Direction:Work{
case left
case right
case up
case down
func run() {
print("枚举")
}
}
Direction.left.run()
- 结构体遵循协议
struct Point:Work{
func run() {
print("结构体")
}
}
let p = Point()
p.run()
- 继承某个类并遵循协议
protocol Work {
func run()
}
class Person{
}
class Stu:Person,Work{
}
- 如果协议后面:协议,代表继承
protocol Work {
func run()
}
protocol Work2:Work {
func run2()
}
class Person{
}
class Stu:Person,Work2{
func run() {
print("1")
}
func run2() {
print("2")
}
}
- 总结:如果后面跟的是类,代表继承(不支持多继承)
//如果跟的是协议:遵循协议
2.协议中代理的使用
- protocol xxx :class 遵循协议类不用继承NSObject
- protocol xxx :NSObjectProtocol 遵循协议类需继承NSObject,因为NSObject实现了NSObjectProtocol的函数
protocol Work :NSObjectProtocol {
func doWork()
}
class Person: NSObject,Work{
func doWork() {
print("人开始工作")
}
class Master{
weak var delegate:Work?
}
let master = Master()
master.delegate = Person()
3.协议中的可选
- 协议的可选仅仅是OC的特性,swift是不支持的
- 解决方案就是让swift协议拥有OC特性
@objc
protocol Work {
@objc optional func doWork()
}
class Person:Work{
}
网友评论