深入解析Swift语言中的协议
协议为方法,属性和其他要求的功能提供了一个蓝本。它只是描述了方法或属性的骨架,而不是实现。方法和属性实现还可以通过定义类,函数和枚举完成。协议的一致性是指方法或属性满足协议的要求。
语法
协议也遵循类似类,结构和枚举的语法:
protocolSomeProtocol{ //protocoldefinition }
协议在类,结构或枚举类型命名声明。单个和多个协议的声明也是可以的。如果多个协议规定,它们必须用逗号分隔。
structSomeStructure:Protocol1,Protocol2{ //structuredefinition }
当一个协议在超类中定义,协议名称应遵循命名在超类之后。
classSomeClass:SomeSuperclass,Protocol1,Protocol2{ //classdefinition }
属性和方法的要求
协议用于指定特定类型的属性或属性的实例。它仅指定类型或实例属性单独而不是指定它是否是一个存储或计算属性。另外,它是用来指定的属性是否为“可获取'或'可设置”。
属性要求由“var”关键字作为属性变量声明。{getset}使用它们类型声明后声明属性可获取和可设置。可获取是由它们的类型{get}取属性声明后提及。
protocolclassa{ varmarks:Int{getset} varresult:Bool{get} funcattendance()->String funcmarkssecured()->String }
protocolclassb:classa{ varpresent:Bool{getset} varsubject:String{getset} varstname:String{getset} }
classclassc:classb{ varmarks=96 letresult=true varpresent=false varsubject="SwiftProtocols" varstname="Protocols" funcattendance()->String{ return"The\(stname)hassecured99%attendance" } funcmarkssecured()->String{ return"\(stname)hasscored\(marks)" } }
letstuddet=classc() studdet.stname="Swift" studdet.marks=98 studdet.markssecured()
println(studdet.marks) println(studdet.result) println(studdet.present) println(studdet.subject) println(studdet.stname)