扩展

扩展能够让我们给一个已有的类、结构体、枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等。。。

甚至是我们拿不到源码的类、结构体、枚举,我们依旧能够给它加扩展。。。

看到这里的时候,我还有点小激动呢。。。但是淡定下来之后,认为这TMD就是个大大的飞线,飞线,飞线。。。这让我们的代码难以理解全面(总要操心是不是哪里还有扩展,我没读到的。。谁会不会在哪写个飞线出来以达到他不可告人的秘密,所以我们不得不在“代码规范”里写:扩展必须紧挨着类的实现写。但是拿不代码的类呢?我们还要规定必须给文件名称起一个类似xxxxExtensions.swift
或者 xxxxDelegate.swift 这种名字。。。为何不让用户通过代理模式去做这种事情,反而是提供了这样一个反代码反人类的特性。。。)

无论怎么说,既然提供了这种东西,还是记录一下这个奇葩的方式吧。

语法:
extension MyClass {
     //要扩展的属性,方法,等功能写在这里
}

extension MyClass: MyProtocol {          //协议在后面的笔记里再说,这里仅仅是提一下
     //要扩展的属性,方法,等功能写在这里
}

扩展能够做的事儿:
1. 加入�计算型属性和计算型静态属性
2. 定义实例方法和类型方法
3. 提供新的构造器
4. 定义下标
5. 定义和使用新的嵌套类型
6. 使一个已有的类型遵守某个协议

之前在写一个样例的时候,发现 Int没有toString方法,于是,我们借助扩展的强大功能,如今能够让Int有toString方法了:

extension Int {

    func toString()->String {

        var tmpArray = ["0","1","2","3","4"

                       ,"5","6","7","8","9"]

        var tmpNum = self

        var tmpString = ""

        while tmpNum > 0 {

            tmpString = tmpArray[tmpNum % 10] + tmpString

            tmpNum /= 10

        }

        return tmpString

    }

}



var myNum:Int = 6234232

println(myNum.toString())

注意:这仅仅是个玩具(演示样例),假设用到项目中的话,请考虑更好的写法。
至于文档中提到的构造器,下标,mutating方法,嵌套类型,无非都是这样。。再简单只是,自己写着玩就好了。不列了。

swift 笔记 (十八) —— 扩展的更多相关文章

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  2. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  3. swift 笔记 (十二) —— 下标

    下标 swift同意我们为 类.结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性.比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码 ...

  4. swift 笔记 (十九) —— 协议

    协议(Protocols) 协议仅是用定义某些任务或者是功能必须的方法和属性. 类似于java里的interface的作用.但协议并不会实现详细的功能. 我猜这个名字源于OO中提到的"契约& ...

  5. 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl【转】

    转自:https://blog.csdn.net/Guet_Kite/article/details/78574781 权声明:本文为 风筝 博主原创文章,未经博主允许不得转载!!!!!!谢谢合作 h ...

  6. swift 笔记 (十四) —— 构造过程

    构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们一般会定义一个方法来完毕,这种方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作 ...

  7. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  8. MYSQL进阶学习笔记十八:MySQL备份和还原!(视频序号:进阶_37)

    知识点十九:MySQL的备份的还原(38) 一.mysql的备份 1.通过使用mysqldump的命令备份 使用mysqldump命令备份,mysqldump命令将数据库中的数据备份成一个文本文件.表 ...

  9. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

随机推荐

  1. php可获取客户端信息

    <?php echo "<br>".$_SERVER['PHP_SELF'];#当前正在执行脚本的文件名,与 document root相关 echo " ...

  2. uploadfiy使用

    动态加参数:$("#file_upload").uploadify("settings", "formData", { knowledgeI ...

  3. 14.2.2 InnoDB Multi-Versioning InnoDB 多版本

    14.2.2 InnoDB Multi-Versioning InnoDB 多版本: InnoDB 是一个多版本的存储引擎: 它保留信息关于改变数据的老版本,为了支持事务功能 比如并发和回滚. 这些信 ...

  4. Delphi TStream 详细介绍

    Delphi TStream 详细介绍Stream对象,又称流式对象,是TStream.THandleStream.TFileStream.TMemoryStream.TResourceStream和 ...

  5. cape town

    开普敦_百度百科 开普敦

  6. Android中关于JNI 的学习(六)JNI中注冊方法的实现

    在前面的样例中,我们会发现,当在Java类中定义一个方法的时候,例如以下: public class ParamTransferTest { public static int testval = 1 ...

  7. hdu-4418-Time travel-高斯+概率dp

    把N个点先转化为2*N-2个点. 比方说把012345转化成0123454321. 这样,就能够找出随意两两个点之间的关系. 然后依据关系能够得出来一个一元多项式的矩阵. 然后就用高斯消元求出矩阵就可 ...

  8. WOJ 1055

    #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char s[6]={0} ...

  9. ACM起步要点总结(转哈工大)

    首先,我想说的就是,我是一个很普通的ACMer,高中没有参加过任何计算机和数学竞赛的经历,也没有ben那样过人的天资,努力至今也未能取得什么成绩,我之所以写下这篇文章,只是希望给刚进大学或者刚进ACM ...

  10. HDU 4814 Golden Radio Base 模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 题目大意: 把一个正整数表示为φ进制, φ = (1+√5)/2 . 且已知: 1. φ + 1 ...