• Swift


    Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如下事情:

    1,给已有的类添加计算属性和计算静态属性
    2,定义新的实例方法和类方法
    3,提供新的构造器
    4,定义下标脚本
    5,是一个已有的类型符合某个协议
    (注意:扩展只能添加新的计算型属性,不能添加存储型属性,也不能添加新的属性监视器)

    示例1:给字符串String类添加下标脚本,支持索引访问
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    extension String
    {
        subscript(start:Int, length:Int) -> String
            {
            get{
                return (self as NSString).substringWithRange(NSRange(location: start, length: length))
            }
            set{
                var tmp = Array(self)
                var s = ""
                var e = ""
                for (idx, item) in enumerate(tmp) {
                    if(idx < start)
                    {
                        s += "(item)"
                    }
                    if(idx > start + length)
                    {
                        e += "(item)"
                    }
                }
                self = s + newValue + e
            }
        }
     
        subscript(index:Int) -> String
            {
            get{
                return String(Array(self)[index])
            }
            set{
                var tmp = Array(self)
                tmp[index] = Array(newValue)[0]
                self = ""
                for (idx, item) in enumerate(tmp) {
                    self += "(item)"
                }
            }
        }
    }
     
    var str = "hangge.com"
    println(str[7,3])
    println(str[7])
     
    str[7,3] = "COM"
    str[0] = "H"
     
    println(str[0,10])


    示例2:给Double增加mm,cm等方法,进行进制转换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    extension Double
    {
        func mm()->String
        {
            return "(self/1)mm"
        }
        func cm()-> String
        {
           return "(self/10)cm"
        }
         
        func dm()->String{
            return "(self/100)dm"
        }
         
        func m()->String
        {
            return "(self/1000)m"
        }
        func km()->String
        {
            return "(self/(1000*1000))km"
        }
    }
     
    var value = 2000000000.0
    println(value.mm())
    println(value.cm())
    println(value.dm())
    println(value.m())
    println(value.km())
  • 相关阅读:
    奇 arch/i386/kernel/head.o(.text+0x3e): undefined reference to `stack_start'
    惊爆:当Python代码遇到zip解压炸弹,未做防护的你后悔莫及!
    肝了1个月,做了10个Python可视化动图,有需要的自己拿
    抖音超火的九宫格视频是如何生成的,Python 告诉你答案
    找出文件夹中的相同文件,并移动到指定文件夹中
    8行Python代码绘制疫情地图
    怎么将python项目打包成exe程序?
    利用Pycharm + Django搭建一个简单Python Web项目
    转行Python会经历的几个学习阶段!未来有哪些就业方向?
    一个python脚本就可以B站查找弹幕发送者!
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4838112.html
Copyright © 2020-2023  润新知