swift 协议用法归纳

tech2022-08-12  139

swift 协议用法归纳

协议中可以定义方法、属性以及下标的声明协议可以被类、结构体、枚举遵守,且可同时遵守多个协议协议中的方法参数不能有默认值协议中定义属性时必须是var定义,必须有get关键字,set关键字非必须 var l: Int {get} //只读 var s: Int {get set} //读写 结构体中遵守的协议方法的方法体重如果要修改结构体某一属性的值,那协议中的对应方法必须用mutating关键字修饰。类不用;枚举未进行测试协议中定义的初始化方法,类遵守时初始化方法前必须加require关键字(如果这个初始化方法正好重写了父类的还要额外加上override关键字)。结构体遵守的协议中不能有初始化方法(原因可能是系统在为自定义初始化方法时系统会默认添加两个初始化方法)。枚举编译会报错 注:如果类被final修饰了可以不用require关键字 protocol P { func p(); init(m: Int) } class Test: P { func p() { <#code#> } required init(m: Int) { <#code#> } } class T {//父类 init(m: Int) {} } class T1: T, P {//子类T1,且遵守P协议 func p() { } //初始化方法重写了父类的,也实现了协议的所以需要required override两个关键字 required override init(m: Int) { super.init(m: m) } } 协议可以继承协议方法的参数可以遵守协议或者(组合协议用符号&) protocol P { func p(); } protocol P1 { func p1(); var l: Int {get} } class Test { func test1(t: P1 & P) { t.l; t.p1(); t.p() } } 如果协议继承时使用了class(用@objc一样),则只能用于类 protocol P: class { } @objc protocol P1 {} //此时协议P,P1只能用于类

个人归纳!如有不正处,望不吝赐教!!!感谢!

最新回复(0)