下标

简介: 说起下标的作用对于数组和字典来说并不用陌生,但在Swift中所有的类型都支持下标。用下标可以很方便的访问对象的具体值。语法格式使用subscript关键字定义下标subscript(形参列表)->下标返回值类型{ get{ //getter部分执行体,该部分必须有返回值}[set(形参名){//setter部分执行体,该部分一定不能有返回值}]}set部分:set部分可定义一段执行性代码,这段代码用于对下标赋值。

说起下标的作用对于数组和字典来说并不用陌生,但在Swift中所有的类型都支持下标。用下标可以很方便的访问对象的具体值。

语法格式

使用subscript关键字定义下标
subscript(形参列表)->下标返回值类型
{
  get{
 //getter部分执行体,该部分必须有返回值
}
[set(形参名)
{
//setter部分执行体,该部分一定不能有返回值
}]
}

set部分:set部分可定义一段执行性代码,这段代码用于对下标赋值。Swift允许定义只读下标,因此可以省略set部分,set部分形参代表了通过下标赋值时传入的新值,当然可以省略set部分形参,会提供隐式的形参名:newValue。

get部分:这段代码将返回下标的值。

注意:定义下标时只能省略set部分,不能省略get部分。Swift只支持只读下标,并不支持“只写下标”

 struct Rect
    {
        var x:Int
        var y:Int
        var width:Int
        var height:Int
        subscript(idx:Int )->Int
            {
            get {
                switch(idx)
                {
                case 0:
                    return self.x
                case 1:
                    return self.y
                case 2:
                    return self.width
                case 3:
                    return self.height
                default:
                    print("不支持")
                    return 0
                }

            }
            set{
                switch(idx)
                {
                case 0:
                    self.x=newValue
                case 1:
                    self.y=newValue
                case 2:
                    self.width=newValue
                case 3:
                    self.height=newValue
                default:
                    print("不支持该索引值")
                }

            }
        }
    }
}
 var rect=Rect(x:20,y:12,width:200,height:300)
  rect[0]=40
    rect[1]=67
    print("\(rect[0],rect[1])")

下标重载

一个类型可以包括多个下标,只要多个下标的形参列表不同(形参数量或者形参类型不同)或者返回值类型不同即可,这种功能成为下标重载。
同一个类型可以定义多个下标,Swift允许通过下标参数列表或返回值类型来区分不同的下标,同一个类型中定义多个不同的下标称为下标重载。

相关文章
|
3月前
|
存储 C语言
|
4月前
|
Java
数组的练习
数组的练习
|
3月前
数组(3)
数组(3)
24 2
|
4月前
|
存储 C++ 索引
c++数组
c++数组
46 2
|
4月前
|
存储 C++ 索引
C++数组
C++数组
48 0
|
4月前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
36 0
|
11月前
|
存储 C语言
C 数组
C 数组。
30 0
|
4月前
数组练习2
数组练习2。
25 2
|
4月前
|
编译器 C++
C++系列四:数组
C++系列四:数组
|
存储 机器学习/深度学习 Java
原来这就是数组
原来这就是数组
70 0