Swift讲解专题十三——下标访问

Easter79
• 阅读 659

Swift讲解专题十三——下标访问

一、引言

        在以前的博客中,讨论过在Objective-C中,通过下标的方式访问自定义数据模型的方法。Objective-C中主要是通过实现一系列方法来使自定义的数据类型支持下标的访问方式,博客地址如下:

在Objective-C中使用下标访问自定义数据模型:http://my.oschina.net/u/2340880/blog/632294

        Swift中的Array,Dictionary类型可以通过下标或者键值的方式来进行数据的访问,实际上在Swift的语法中,下标可以定义在类、结构体、枚举中。开发者可以通过下标的方式来对属性进行访问而不用使用专门的存取方法。并且定义的下标不限于一维,开发者可以定义多维的下标来满足需求。

二、下标的语法结构

        下标使用subscript来定义,其有些类似于方法,参数和返回值分别作为下标入参和通过下标所取的值。但是在subscript实现部分,又十分类似于计算属性,其需要实现一个get块和可选实现一个set块,get块用于使用下标取值,set块用于使用下标设置值,因此,subscript结构更像是计算属性和方法的混合体,示例如下:

class MyClass {
    var array=[1,1,1,1,1]
    subscript(param1:Int)->Int{
        set{
            array[param1] = newValue
        }
        get{
            return array[param1]
        }
    }
}
var obj = MyClass()
obj[0] = 3

开发者可以只编写get块来实现只读的下标访问。对于多维下标的访问方式,只需修改subscript中的参数个数即可,示例如下:

class MyClass {
    var array=[1,1,1,1,1]
    subscript(param1:Int,param2:Int)->Int{
        set{
            array[param1] = newValue
        }
        get{
            return array[param1]
        }
    }
}
var obj = MyClass()
obj[0,1] = 3

三、下标的特性

        Swift中的下标可以自定参数个数和参数类型,返回数据的类型开发者也可以进行自定义。但是有一点需要注意,下标的参数不能设置默认值,也不能设置为in-out类型。多维下标常用语行列数据的访问,示例如下:

class SectionAndRow {
    var array:Array<Array<Int>> = [  [1,2]
                                    ,[3,4]
                                    ,[5,6]
                                    ,[7,8]
                                  ]
    subscript(section:Int,row:Int)->Int{
        get{
            let temp = array[section]
            return temp[row]
        }
    }
    
}
var data = SectionAndRow()
//通过二维下标取值
data[1,1]

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
swift下标脚本和extension扩展
一.类的下标方法类、结构体和枚举可以定义下标,它可以作为访问集合、列表或序列成员元素的快捷方式。可使用下标通过索引值来设置或检索值而不需要为设置和检索分别使用实例方法。可以为一个类型定义多个下标,并且下标会基于传入的索引值的类型选择合适的下标重载使用。下标没有限制单个维度,你可以使用多个输入形参来定义下标以满足自定义类型的需求。下标脚本允许通过
Easter79 Easter79
3年前
Swift讲解专题七——函数
Swift讲解专题七——函数一、引言      函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定。Swift和ObjectiveC的一大区别就在于Swift中的函数可以进行嵌套
Easter79 Easter79
3年前
Swift讲解专题九——枚举
Swift讲解专题九——枚举一、引言      在ObjectiveC语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。二、枚举语法      Swift中enum关
Easter79 Easter79
3年前
Swift专题讲解十六——ARC在Swift中的应用
Swift专题讲解十六——ARC在Swift中的应用一、引言      ARC(自动引用计数)是ObjectiveC和Swift中用于解决内存管理问题的方案。在学习ObjectiveC编程时经常会学习到一个关于ARC的例子:在一个公用的图书馆中,每次进入一人就将卡插入,走的时候将自
Easter79 Easter79
3年前
Swift讲解专题八——闭包
Swift讲解专题八——闭包一、引言      Swift中的闭包是有一定功能的代码块,这十分类似于ObjectiveC中的block语法。Swift中的闭包语法风格十分简洁,其作用和函数的作用相似。二、从一个系统函数看闭包      Swift标准函数库中提供了一个sort排序函数,对
Easter79 Easter79
3年前
Swift中构造方法的解析
Swift中构造方法的解析一、引言     构造方法是一个类创建对象最先也是必须调用的方法,在ObjectiveC中,开发者更习惯称这类方法为初始化方法。在ObjectiveC中的初始化方法与普通函数相比除了要以init抬头外并无太严格的分界,而在Swift语言体系中,构造方法与普通的方法分界十分严格,从格式
Easter79 Easter79
3年前
Swift讲解专题十二——方法
Swift讲解专题十二——方法一、引言      方法只是一个术语,其实就是将函数与特定的类型结合,类、结构体、枚举都可以定义方法,方法又分为实例方法和类型方法,类型方法类似于ObjectiveC中的类方法。Swift和ObjectiveC的一大不同是,ObjectiveC只有在类中可以定义方法。
Easter79 Easter79
3年前
Swift专题讲解二十——扩展
Swift专题讲解二十——扩展一、简介      Swift中的扩展与ObjectiveC中的类别功能相似,扩展可以为一个已有的类、结构体、枚举或者协议添加新的属性或方法,与ObjectiveC的类别不同的是,Swift中的扩展没有名称。      Swift中的扩展支持如下功能:1.添加计
Easter79 Easter79
3年前
Swift专题讲解二十三——高级运算符
Swift专题讲解二十三——高级运算符一、引言      除了前边博客中介绍的基本运算符外,Swift中还支持更多高级运算符,也支持开发者进行运算符的自定义。Swift中的算符运算符有一个特点,其不会产生溢出,如果有操作产生溢出,程序会直接抛出异常。如果开发者在开发中需要有溢出操作,需要使用溢出操作
Easter79 Easter79
3年前
Swift专题讲解十四——继承
Swift专题讲解十四——继承一、引言      Swift中,一个类可以从另一个类继承方法、属性、下标及其他特性。当一个类继承于另一个类时,这个类被称为子类,所继承的类被称为父类。在Swift中,继承是类区别于其他类型的主要特征。子类除了可以调用父类的属性,下标,方法外,其也可以对父类的属性,下标,方法进
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k