方法协议
作用:让一个类/结构体/枚举的方法,分解为更小的组合,从而更具有灵活性
1. 类型方法协议,前面加上static修饰
protocol AProtocol {
static func aFun()
}
//class A:AProtocol {
// static func aFun() {
//
// }
//}
class A:AProtocol {
class func aFun() {
print("AProtocol");
}
}
class B:A {
}
B.aFun() //B直接调用
//类型协议,为了让子类继承父类的方法 ,可以将实现方法 static 修饰改为class修饰
2.实例方法协议
//有一个产生随机数的协议
protocol RandomOpertable {
func makeRandomInt() -> Int
}
struct MakeRandomInt:RandomOpertable {
func makeRandomInt() -> Int {
return Int(arc4random())
}
}
let random1 = MakeRandomInt()
random1.makeRandomInt()
//如果此时,产生随机数的要求变了,现在要求产生的随机数在1-6之间,那么为了不修改原来写的大量的代码,只要我们再重新定义一个结构,修改实现协议方法
struct MakeRandomIntMaxSix:RandomOpertable {
func makeRandomInt() -> Int {
return Int(arc4random())%6 + 1
}
}
let random2 = MakeRandomIntMaxSix()
random2.makeRandomInt()
.......
//枚举 如果修改自己类型属性的值,需要mutating修饰
protocol Switchable {
mutating func OnOff()
}
enum MySwitch:Switchable {
case on,off
mutating func OnOff() {
switch self { //self指修改自己的值
case .off:
self = .on
default:
self = .off
}
}
}
var mySwitch = MySwitch.off
mySwitch.OnOff()
print(mySwitch)
网友评论