详解Swift中的下标访问用法

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]
(0)

相关推荐

  • 深入理解Swift中的访问控制关键字

    前言 在Swift3.0以前有三种访问控制关键字,分别是private.internal和public.而在swift3以后,又在原来的基础上增加了两种访问控制关键字:fileprivate和open.他们可以看作是private和public的进一步细分.下面是各个修饰符的区别以及访问权限排序. 各个修饰符的区别 private swift3.0 private访问级别所修饰的属性或者方法只能在当前类里访问. class A { private func test() { print("thi

  • Swift学习教程之访问控制详解

    前言 本文主要给大家介绍了关于Swift访问控制的相关内容,访问控制对访问你的其他代码源文件和模块部分进行了约束.这个特性允许你隐藏你的代码实现,并且指定通过其可以访问和使用该代码的优选接口. class,structure 和 enumeration 都可以指定访问级别,当然,property,method,initializer 和 属于这里类型的 subscript.protocol 可以限制到某个上下文,全局变量,变量和函数也可以. 另外,Swift 也提供默认的使用级别给典型的使用场景

  • Swift中的访问控制和protected

    原文再续,书折第一回. 很多其他编程语言都有一种"protected"设定,可以限制某些类方法只能被它的子类所使用. Swift支持了访问控制后,大家给我们的反馈都很不错.而有的开发者问我们:"为什么Swift没有类似protected的选项?" 当我们在设计Swift访问控制的不同等级时,我们认为有两种主要场景: ●在一个APP里:隐藏某个类的私密细节. ●在一个开源框架里:不让导入这个框架的APP,随便接触框架的内部实现细节. 上面的两种常见情况,对应着priv

  • Swift 访问权限的资料整理

    Swift 访问权限 1>internal :内部的, 1.默认情况下所有的类的属性&方法的访问权限都是internal       2.若本模块(项目/包/target)中可以访问 2> private:私有的 1.只有在本类中可以访问 3> open 公开的 1.可以跨模块(包/target)都是可以访问的 4> fileprivate  swift3.0 1.只要在本文件中都是可以进行访问的 示例代码: import UIKit /* 1>internal :内

  • Swift语言中的一些访问控制设置详解

    限制访问代码块,模块和抽象通过访问控制来完成.类,结构和枚举可以根据自己的属性,方法,初始化函数和下标来通过访问控制机制进行访问.常量,变量和函数的协议限制,并允许通过访问控制来访问全局和局部变量.应用于属性,类型及函数的访问控制可以被称为"实体". 访问控制模型是基于模块和源文件的. 模块定义为代码分配一个单独的单元,并且可以使用import 关键字导入.源文件被定义为一个单一的源代码文件,模块可访问多种类型和函数. 三种不同的访问级别是由 Swift 语言提供.它们分别是 Publ

  • 详解Swift中的下标访问用法

    Swift中的Array,Dictionary类型可以通过下标或者键值的方式来进行数据的访问,实际上在Swift的语法中,下标可以定义在类.结构体.枚举中.开发者可以通过下标的方式来对属性进行访问而不用使用专门的存取方法.并且定义的下标不限于一维,开发者可以定义多维的下标来满足需求. 下标的语法结构 下标使用subscript来定义,其有些类似于方法,参数和返回值本别作为下标入参和通过下标所取的值.但是在subscript实现部分,又十分类似于计算属性,其需要实现一个get块和可选实现一个set

  • 详解Java8中Optional的常见用法

    目录 一. 简介 二.Java8 之前,空指针异常判断 三.Optional的使用 1.创建Optional实例 2.访问 Optional 对象的值 3.返回默认值 4.返回异常 (常用) 5.转换值 6.过滤值 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空. Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现.但是 Optional

  • 详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法

    详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法 由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与UnsafeMutablePointer类型,分别对应为const Type*类型与Type *类型. 而在Swift编程语言中,由于一般数组(Array)对象都无法直接用于C语言中含有指针类型的函数参数(比如:void*),所以往往需要

  • 一文详解Python中logging模块的用法

    目录 一.低配logging 1.v1 2.v2 3.v3 二.高配logging 1.配置日志文件 2.使用日志 三.Django日志配置文件 一.低配logging 日志总共分为以下五个级别,这个五个级别自下而上进行匹配 debug-->info-->warning-->error-->critical,默认最低级别为warning级别. 1.v1 import logging logging.debug('调试信息') logging.info('正常信息') logging

  • 详解Swift中enum枚举类型的用法

    一.引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法 Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 case 王 case 李 case 赵 } //创建一个枚举类型的

  • 详解Swift中的Characters字符类型与String字符串类型

    一.引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础 在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过下面两种方式来创建空字符串: let str1 = "&qu

  • 详解Vue中watch的高级用法

    假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text" v-model="firstName"></p> </div> new Vue({ el: '#root', data: { firstName: 'Dawei', lastName: 'Lou', fullName: '' },

  • 详解Swift中属性的声明与作用

    一.引言 属性将值与类,结构体,枚举进行关联.Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算属性用于计算一个值,其可以用于类,结构体和枚举. 二.存储属性 存储属性使用变量或者常量来存储一个值,在声明存储属性时,可以为其设置一个默认值,也可以在构造示例是进行值的设置,属性可以通过点语法来访问,结构体的存储属性示例代码如下: struct MyStruct { var property1 = 1 var property2:Int } var ob

  • 详解Python中openpyxl模块基本用法

    Python操作EXCEL库的简介 1.1 Python官方库操作excel Python官方库一般使用xlrd库来读取Excel文件,使用xlwt库来生成Excel文件,使用xlutils库复制和修改Excel文件,这三个库只支持到Excel2003. 1.2 第三方库openpyxl介绍 第三方库openpyxl(可读写excel表),专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易. 注意:如果文字编码是"gb2312" 读取后就会显示乱码,请

  • 详解Swift中的数据类型类型转换

    一.类型检查与转换 在Objective-C和Java中,任何类型实例都可以通过强转使编译器认为它是另一种类型的实例,这么做其实是将所有的安全检查工作都交给了开发者自己来做.先比之下,Swift中的Optional类型转换就会比较安全与可靠. Swift中使用is关键字来进行类型的检查,其会返回一个布尔值true或者false来表明检查是否成立,示例如下: var str = "HS" if str is String { print(str) } Swift中有向上兼容与向下转换的特

随机推荐