Swift学习笔记十二:下标脚本(subscript)

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

一、常规定义

class Student{
    var scores:Int[] = Array(count:5,repeatedValue:0)
    subscript(index:Int) -> Int{
        get{
            return scores[index];
        }
        set{
            scores[index] = newValue
        }
    }
}
var a = Student()
a[0] = 1
a[1] = 2
println("a[0]:\(a[0]),a[1]:\(a[1])”)

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

二、下标语法参数

     下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。下标脚本的返回值也可以是任何类型。下标脚本可以使用变量参数和可变参数,但使用写入读出(in-out)参数或给参数设置默认值都是不允许的。

class Student{
    var scores:Int[] = Array(count:5,repeatedValue:0)
    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++]
            }
        }
    }
}
var a = Student()
a[1,2,3] = [5,6,7]
println(a[0,1,2,3,4])

不过至今还未发现怎么向数组一样可以使用区间类型,比如a[1...3]







你可能感兴趣的:(技术,swift,subscript,下标脚本)