- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 扩展和协议11.1 扩展11.2 协议11.3 可选协议11.4 使用协议11.5 在扩展中使用协议11.6 协议的继承第11章 扩展和协议11.7 协议合成11.8 检查协议的一致性11.9 委托11.10 综合案例11.11上机实践11.1 扩展11.1.1 扩展的定义11.1.2 扩展属性11.1.3 扩展构造器11.1.4 扩展方法11.1.5 扩展下标脚本11.1.6 扩展嵌套类型11.1.1 扩展的定义扩展需要使用关键字extension进行定义,其语法形式如下:extension 类型 { … }11.1.2 扩展属性扩展可以为已有类型添加属性,其中添加的属性包括两种,分别为计算属性和类型属性。本小节将讲解对这两种属性的添加进行详细的讲解。1.计算属性扩展可以向类型中添加计算属性。2.类型属性扩展可以向已有的类型中添加类型属性。11.1.3 扩展构造器扩展可以为已有类型添加新的构造器。扩展可以为已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为其构造器参数,或者提供该类型的原始实现中未提供的额外初始化选项。在使用扩展为已有的类添加新的构造器时,需要注意以下两点:1.不可以添加指定构造器扩展可以向已有的类中添加便利构造器,但是不可以添加指定构造器,否则程序会出现错误。2.不可以添加析构器扩展不可以向类中添加新的析构器;否则,程序就会出现错误。11.1.4 扩展方法扩展可以向已有的类型中添加方法,其中包括实例方法和类型方法。以下就是对这两种方法进行添加的讲解。1.实例方法扩展可以向已有的类型中添加实例方法。通过扩展添加的实例方法也可以修改该实例本身。在结构体和枚举类型中,修改self或其属性的方法必须将该实例方法标注为mutating。2.类型方法扩展可以向已有的类型中添加类型方法。11.1.5 扩展下标脚本扩展可以向已有的类型中添加类型方法。11.1.6 扩展嵌套类型扩展可以为已有的类、结构体和枚举添加新的嵌套类型。11.2 协议11.2.1 协议的定义11.2.2 协议的实现11.2.3 协议的成员声明——属性11.2.4 协议的成员声明——方法11.2.5 协议的成员声明——可变方法11.2.6 协议的成员声明——构造器11.2.1 协议的定义协议的定义方式与类、结构体和枚举的定义非常相似,它需要使用到关键字protocol,其语法形式如下:protocol 协议名称 { … }11.2.2 协议的实现类、结构体或枚举都可以采纳协议。协议定义好以后,类、结构体或枚举为协议定义的这些要求提供具体实现。协议在类、结构体或枚举中实现的实现的语法都是一样的,以结构为例,协议在结构中的实现形式如下:struct 结构名称:协议名 {…}虽然协议在类、结构体或枚举中实现的实现的语法都是一样的,但是也存在着一些特殊情况,以下就是对这些特殊情况的介绍。1.对多个协议进行实现在类型中,除了可以对一个协议进行实现外,还可以对多个协议进行实现。实现多个协议时,各协议之间用“,”逗号分隔。以类为例,其语法形式如下:class 类名:协议名1,协议名2,协议名3,…{…}同样的方式适用于其他类型。2.协议在指定类型的枚举中实现对于一个具有指定类型的枚举类型来说,在“:”冒号后面首先跟着的是枚举类型指定的数据类型,然后才是协议名称,其实现形式如下:enum 枚举类型名:数据类型,协议名{…}其中,数据类型和协议名之间使用逗号分隔。3.协议在子类中实现如果一个类含有父类的同时也采用了协议,应当把父类放在所有的协议之前,其形式如下:class 类名:父类名,协议名{…}11.2.3 协议的成员声明——属性在协议中可以声明特定名称和类型的实例属性(存储属性和计算属性)或类型属性。协议不指定属性是存储型属性还是计算型属性,它只指定属性的名称和类型。此外,协议还指定属性是只读的还是可读可写的。本小节将讲解两种属性在协议中的声明。1.实例属性实例属性包括计算属性和存储属性,它的声明形式如下:protocol 协议名称{var 属性名称:数据类型{get} //声明一个只读的实例属性 var 属性名称:数据类型{get set} //声明一个可读写的实例属性}2.类型属性类型属性的声明和实例属性的声明一般相同,只不过需要添加一个代表类型的关键字,其中类型属性定义形式如下:protocol 协议名{static var 属性名1: 数据类型 { get } //声明一个只读的类型属性static var 属性名2: 数据类型 { get set } //声明一个可读写的类型属性}11.2.4 协议的成员声明——方法在协议中可以声明方法,它可以为其遵循者(即实现协议的类型)提供实现某些指定的实例方法或类方法。这些方法作为协议的
您可能关注的文档
- SQL Server2000实用教程第5章 Transact-SQL程序设计.ppt
- SQL Server2000实用教程第6章 数据库安全性管理.ppt
- SQL Server2000实用教程第7章 数据库管理高级应用.ppt
- SQL Server2000实用教程第8章 SQL Server系统应用实例.ppt
- SQL Server2005第1章_SQL_Server_2005的安装和配置.ppt
- SQL Server数据库及PHP技术第1章 数据库系统概述.pptx
- SQL Server数据库及PHP技术第2章 关系数据库.pptx
- SQL Server数据库及PHP技术第3章 数据库管理.pptx
- SQL Server数据库及PHP技术第4章 结构化查询语言.pptx
- SQL Server数据库及PHP技术第6章 数据库高级主题.pptx
文档评论(0)