zoukankan      html  css  js  c++  java
  • 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())
  • 相关阅读:
    C++11——nullptr和NULL的区别
    C++11——原始字面量
    查看电脑内存是ddr3还是ddr4
    建立虚拟课堂需要考虑哪些因素?
    【解决方案】AI赋能智慧楼宇,如何实现多场景下的精细管理?
    H265网页播放器EasyPlayer.JS如何监听播放等相关事件回调?
    TSINGSEE青犀视频流媒体平台按需拉流和非按需拉流的区别及适用情况
    TSINGSEE青犀视频助力医疗废物处置可视化监管,筑牢口岸医疗废物管控防线
    TSINGSEE青犀视频行人智能检测测试报错panic: runtime error排查过程
    TSINGSEE青犀视频接入海康解码器SDK解码远程文件流程
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4838112.html
Copyright © 2011-2022 走看看