• swift 笔记 (十八) —— 扩展


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

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

    看到这里的时候,我还有点小激动呢。。。但是淡定下来之后,认为这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方法,嵌套类型,无非都是这样。。再简单只是,自己写着玩就好了。不列了。
  • 相关阅读:
    Spring MVC 程序首页的设置
    绿色版Tomcat 启动 + 停止 + 随系统自动启动
    Lazy Load, 延迟加载图片的 jQuery 插件
    ibatis参数传递小技巧
    SpringMVC接收页面表单参数-java-电脑编程网
    用 JS 点击左右按钮 使图片切换
    JS数组方法汇总 array数组元素的添加和删除
    关于jQuery UI 使用心得及技巧
    MySQL查询in操作 查询结果按in集合顺序显示_Mysql_脚本之家
    JSTL c标签,fn标签,fmt标签
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4030162.html
Copyright © 2020-2023  润新知