所在的位置: swift >> swift优势 >> Swift协议

Swift协议

协议协议是一种表示不相关类型共性的方式。协议是一种对象类型,不过并没有协议对象——你无法实例化协议。协议要更加轻量级一些。协议声明仅仅是一些属性与方法列表而已。属性没有值,方法没有代码!其想法是“真实”的对象类型可以声明它属于某个协议类型;这叫作使用或遵循协议。使用协议的对象类型会遵守这样一个契约:它会实现协议所列出的属性与方法。任何类型(枚举、结构体、类,甚至是另一个协议)都可以使用该协议。为了做到这一点,它需要在声明中的名字后面加上一个冒号,后跟协议名(如果使用者是个拥有父类的类,那么父类后面还需要加上一个逗号,协议则位于该逗号后面)。as!与as?可用于将声明为协议类型的对象向下转换为其真正的类型。声明协议只能在文件顶部声明协议。要想声明协议,请使用关键字protocol,后跟协议名;作为一种对象类型,协议名首字母应该是大写的。协议中的属性声明包含了var(不是let)、属性名、冒号、类型,以及包含单词get或getset的一对花括号。对于前者来说,使用者对该属性的实现是可写的;对于后者来说,它需要满足如下规则:使用者不可以将getset属性实现为只读计算属性或常量(let)存储属性。要想声明静态/类属性,请在前面加上关键字static。类使用者可以将其实现为类属性。协议中的方法声明是个没有函数体的函数声明,即没有花括号,因此也没有代码。任何对象函数类型都是合法的,包括init与下标(在协议中声明下标的语法与在对象类型中声明下标的语法是相同的,只不过没有函数体,就像协议中的属性声明一样,它也可以包含get或getset)。要想声明静态/类方法,请在前面加上关键字static。类使用者可以将其实现为类方法。如果协议的唯一目的是将其他协议组合起来,但不会添加任何新功能,并且这种组合仅仅用在代码中的一个地方,那么可以通过即时创建组合协议以避免声明协议。要想做到这一点,请使用类型名protocol……,……,其中尖括号中的内容是个逗号分隔的协议列表。可选协议成员在Objective-C中,协议成员可以声明为optional,表示该成员不必被使用者实现,但也可以实现。为了与Objective-C保持兼容,Swift也支持可选协议成员,不过只用于显式与Objective-C桥接的协议,方式是在声明前加上

objc属性。在这种协议中,可选成员(方法或属性)是通过在声明前加上optional关键字实现的:可选协议成员只有类可以使用这种协议,并且符合如下两种情况之一才能使用该特性:类是NSObject子类,或者可选成员被标记为

objc特性。类协议名字后面的冒号后使用关键字class声明的协议是类协议,表示该协议只能由类对象类型使用。(如果协议已经被标记为

objc,那就无须使用class;

objc特性隐含表示这还是个类协议。)关键字weak标志delegate属性将会使用特殊的内存管理,只有类实例可以使用这种特殊的内存管理。delegate属性的类型是个协议,而协议可以由结构体或枚举类型使用。为了告诉编译器该对象实际上是个类实例而非结构体或枚举实例,这里的协议被声明成了类协议。


转载请注明:http://www.aierlanlan.com/grrz/7087.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了