Swift 方法协议

方法协议

作用:让一个类/结构体/枚举的方法,分解为更小的组合,从而更具有灵活性

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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 132.转换错误成可选值 通过转换错误成一个可选值,你可以使用 try? 来处理错误。当执行try?表达式时,如果...
    无沣阅读 1,282评论 0 3
  • 本章将会介绍 协议语法属性要求方法要求(Method Requirements)Mutating 方法要求构造器要...
    寒桥阅读 432评论 0 3
  • 扩展 扩展就是向一个已有的类、结构体、枚举类型或者协议类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类...
    cht005288阅读 475评论 0 0
  • 第一天来超市上班,早早就起床啦。7:30要开早会,
    憧憬幸福阅读 577评论 0 0