1、Subscript

  • 下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值。语法类似于实例方法和计算型属性的混合。与定义实例方法类似,定义下标脚本使用 subscript 关键字,显式声明入参(一个或多个)和返回类型,每个输入参数的类型也没有限制,返回值可以是任何类型,并无限制。输入参数也可以使用可变参数,但使用输入/输出(in-out)参数或和给参数设置默认值都是不允许的。与实例方法不同的是下标脚本可以设定为读写或只读。这种方式又有点像计算型属性的 getter 和 setter 方法。

  • 下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的 a[0]。这就是一个下标脚本。通过索引 0 来快速取值。在 Swift 中,我们可以对类(Class)、结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法。

  • 重点:
    • 下标脚本使用 subscript 关键字来定义。
    • 下标脚本使用 get、set 来定义读、写属性,并不需要 2 个属性都有,可以只读,并且读必须有。
    • 定义 set 属性时,传入的参数默认名称为 newValue。并且 newValue 的类型和 subscript 函数返回值相同。

2、下标脚本的使用

2.1 下标脚本的使用 1

  • 下标脚本的定义

        struct myString {
    
            var str:String = ""
    
            subscript(start:Int, length:Int) -> String {
    
                get {
                    return (str as NSString).substringWithRange(NSRange(location: start, length: length))
                }
    
                set {
    
                    str = newValue
                }
            }
        }
  • 下标脚本的使用

        let str1 = myString(str: "hello world")
    
        let str2 = str1[2, 5]
    
        // 输出 hello world
        print(str1[0, 11])
    
        // 输出 llo w
        print(str2)
    
        var str3 = myString()
    
        // [0, 0] 参数无意义
        str3[0, 0] = "world"
    
        // 输出 world
        print(str3[0, 5])

2.2 下标脚本的使用 2

  • 下标脚本的定义

        class Student1 {
    
            var scores:[Int] = Array(count:5, repeatedValue:0)
    
            subscript(index:Int) -> Int {
    
                get {
    
                    return scores[index];
                }
    
                set {
    
                    scores[index] = newValue
                }
            }
    
            subscript(indexs:Int...) -> [Int] {
    
                get {
                    var values:[Int] = Array()
    
                    for index in indexs {
                        values.append(scores[index])
                    }
                    return values
                }
    
                set {
                    var i = 0
    
                    for index in indexs {
    
                        scores[index] = newValue[i]
    
                        i += 1
                    }
                }
            }
        }
  • 下标脚本的使用

        let stu1 = Student1()
    
        stu1[0] = 1
        stu1[1] = 2
    
        // 输出 a[0]:1, a[1]:2
        print("a[0]:\(stu1[0]), a[1]:\(stu1[1])")
    
        let stu2 = Student1()
    
        stu2[1, 2, 3] = [5, 6, 7]
    
        // 输出 [0, 5, 6, 7, 0]
        print(stu2[0, 1, 2, 3, 4])

最新文章

  1. C#动态规划查找两个字符串最大子串
  2. iOS项目常用效果方法注意点集锦
  3. gong server
  4. centos搭建属于自己wordpress网站
  5. JavaScript原型理解
  6. WEB-INF/views/menu/list.jsp (line: 26, column: 58) equal symbol expected
  7. marquee 笔记
  8. HDU 1069 Monkey and Banana (DP)
  9. PCL—低层次视觉—点云滤波(初步处理)
  10. LiBsvm用于多分类时训练模型参数含义
  11. JSP 表单request内容
  12. Android 执行 adb shell 命令
  13. WindowsAPI每日一练(1) MessageBoxA
  14. 转载CSDN博客步骤
  15. Kali系列之multi/handler(渗透win7)
  16. 爬虫系列之requests
  17. 用express快速写一个hello world
  18. RBAC用户权限管理数据库设计【转载】
  19. C#中获取用户登录IP地址
  20. LR监控Apache资源

热门文章

  1. linux正则表达式使用
  2. android -- 蓝牙 bluetooth (五)接电话与听音乐
  3. HDU 4712:Hamming Distance
  4. Code(组合数学)
  5. zoj 3557 How Many Sets II
  6. Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: '' for column 'createtime'
  7. jquery easyui 弹出消息框
  8. Linux下常用的shell命令记录1
  9. Json 入门例子 多行数组 【1】
  10. Struts2的配置