Swift 3.0基础学习之下标

前言

类,结构体和枚举都可以定义下标,使用下标可以快速访问集合,列表或者序列的数据成员元素。可以使用someArray[index]来访问Array, 使用someDictionary[key]来访问Dictionary。

一个类型可以定义多个下标。

定义一个get set的下标:

subscript(index: Int) -> Int {
 get {
  // return an appropriate subscript value here
 }
 set(newValue) {
  // perform a suitable setting action here
 }
}

定义一个read-only的下标

subscript(index: Int) -> Int {
 // return an appropriate subscript value here
}

例子:

struct TimesTable {
 let multiplier: Int
 subscript(index: Int) -> Int {
  return multiplier * index
 }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// Prints "six times three is 18"

还可以使用多个下标, 任何类型,除了in-out类型的参数

struct Matrix {
 let rows: Int, columns: Int
 var grid: [Double]
 init(rows: Int, columns: Int) {
  self.rows = rows
  self.columns = columns
  grid = Array(repeating: 0.0, count: rows * columns)
 }
 func indexIsValid(row: Int, column: Int) -> Bool {
  return row >= 0 && row < rows && column >= 0 && column < columns
 }
 subscript(row: Int, column: Int) -> Double {
  get {
   assert(indexIsValid(row: row, column: column), "Index out of range")
   return grid[(row * columns) + column]
  }
  set {
   assert(indexIsValid(row: row, column: column), "Index out of range")
   grid[(row * columns) + column] = newValue
  }
 }
}

参考翻译英语原文:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Subscripts.html#//apple_ref/doc/uid/TP40014097-CH16-ID305

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用Swift能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

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

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

  • 详解Swift编程中下标的用法

    访问一个集合的元素成员,在类中的序列和列表,结构和枚举都可以使用下标.这些下标用于存储和使用索引来检索值.数组元素可使用如:someArray[index],在 Dictionary 实例及其后续成员元素的访问也可以使用如:someDicitonary[key]. 对于单一类型,下标范围可以从单一到多个声明.我们可以用适当的下标重载传递给下标索引值的类型.下标也可以根据输入数据类型声明范围从单一维度到多维度. 下标声明语法和用法 让我们回顾一下计算属性.下标也遵循计算属性相同的语法.对于查询类型

  • Swift教程之下标详解

    类,结构和枚举类型都可以通过定义下标来访问一组或者一个序列中的成员元素.通过下标索引就可以方便地检索和设置相应的值,而不需要其他的额外操作.比如你可以通过someArray[index]来访问数组中的元素,或者someDictionary[key]来对字典进行索引. 你可以为一个类型定义多个下标,以及适当的下标重载用来根据传递给下标的索引来设置相应的值.下标不仅可以定义为一维的,还可以根据需要定义为多维的,多个参数的. 1.下标语法 下标可以让你通过实例名后加中括号内一个或多个数值的形式检索一个

  • Swift 3.0基础学习之下标

    前言 类,结构体和枚举都可以定义下标,使用下标可以快速访问集合,列表或者序列的数据成员元素.可以使用someArray[index]来访问Array, 使用someDictionary[key]来访问Dictionary. 一个类型可以定义多个下标. 定义一个get set的下标: subscript(index: Int) -> Int { get { // return an appropriate subscript value here } set(newValue) { // perf

  • Swift 3.0基础学习之类与结构体

    前言 和其他语言不同的是,Swift不需要为自定义的类和结构体创建接口和实现文件.只需要创建单一文件用来创建类和结构体,其他的外部接口的代码系统会自动生成.下面这篇文章主要介绍了关于Swift 3.0类与结构体的内容,感兴趣的朋友一起来看看吧. 类和结构体区别 Swift的类和结构体具有以下相同的特点: 可以定义属性来保存值 可以定义方法来提供功能 可以定义下标来使用他们的值 可以定义初始化器来配置他们的初始化状态 可以在默认的实现上扩展他们的功能 遵从协议来提供标准的功能 类具有结构体没有的额

  • Swift 3.0基础学习之闭包

    前言 闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似.下面这篇文章就来详细介绍了关于Swift 3.0中的闭包,感兴趣的一起来看看吧. 开始 闭包的书写格式如下: { (parameters) -> return type in statements } 如 reversedNames = names.sorted(by: { (s1: String, s2: Str

  • Swift 3.0基础学习之扩展

    介绍 扩展可以为类,结构体,枚举和协议添加新的功能.包括可以对没有源码访问权限的类型进行扩展.扩展和 Objective-C 分类 的概念类似.(和 Objective-C 的分类不一样的是,Swift 扩展没有名称). 在 Swift 中,扩展可以做到: 添加计算的实例属性和计算的类型属性 定义实例方法和类型方法 提供新的初始化器 定义下标 定义并使用新的嵌套类型 使现有类型符合协议 值得注意的是:扩展可以为类型添加功能,但是不可以重写现有的功能. 扩展语法 使用关键字 extension 定

  • Swift 3.0基础学习之枚举类型

    枚举语法 使用关键字 enum 定义一个枚举 enum SomeEnumeration { // enumeration definition goes here } 例如,指南针有四个方向: enum CompassPoint { case north case south case east case west } 这里跟 c 和 objective-c 不一样的是,Swift 的枚举成员在创建的时候没有给予默认的整型值.所以上面代码中的东南西北并不是0到3,相反,不同的枚举类型本身就是完全

  • 0基础学习前端开发的一些建议

    以下纯属个人观点和建议,肯定是有局限性的,但是也希望能给你带来一些帮助. 我们俨然能感受到前端岗位现在已经发展成了最重要的研发岗位之一,所以多我们提出的要求也就越来越高了.所以我们需要的也就不仅仅只是掌握css.html.JavaScript了,但是这三大件一直都是前端的根本,这一点从未改变,而这三大件中JavaScript又是重中之重. 接下来我会结合我的一点经验,给出前端系统学习路线的一些具体建议以及入门前端时的一些困境. 入门前端时的一些困境 1.因一些基础算法.数据结构理论不扎实导致一些

  • Swift 3.0 enum 的灵活使用介绍

    1. 前言 一晃半年了,从之前的顺丰优选跳槽到现在的闪银,都没有时间好好写文章,先进行自我批评,最近在忙开源项目,在造各种轮子的过程中,深深的体会到了Swift中enum的便利,直接上代码. 2. Objective-C 中的enum typedef NS_ENUM(NSUInteger, UserType) { UserTypeStudent, UserTypeTeacher, UserTypeStaff, UserTypeAdministrator, UserTypeOther }; 这是一

  • 浅谈swift 4.0中private所发生的变化

    前言 当Swift首次引入访问级别时,对此进行了一些混淆和不解.虽然开发人员对于添加对Swift编程语言的访问控制感到兴奋,但是private关键字的行为与其他编程语言的行为不同. 之前在swift 3.0的时候,如果把声明的变量或方法加上private前缀,那么它就只能在当前的class里使用,extension 中也不能使用.改成fileprivate,却又可以在其他类中实例化后使用,属性的作用域就会更大,可能会不小心造成属性的滥用. 所以在Swift 4 中,private 的属性的作用域

  • Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】

    本文实例讲述了Python基础学习之基本数据结构.分享给大家供大家参考,具体如下: 前言 相比于PHP,Python同样也是脚本解析语言,所以在使用Python的时候,变量和数据结构相对于编译语言来说都会简单许多,但是Python相比于PHP来说,变量类型的定义会比较严格:string->int的转换没有PHP那么方便.但这也让程序稳定性有所提升,例如和客户端交互的时候,数据库取出来的数字int和缓存取出来的数字(默认是string)需要手动进行转换(否则会有报错提示),而PHP不需要手动转换的

  • Java基础学习笔记之数组详解

    本文实例讲述了Java基础学习笔记之数组.分享给大家供大家参考,具体如下: 数组的定义于使用 1:数组的基本概念 一组相关变量的集合:在Java里面将数组定义为引用数据类型,所以数组的使用一定要牵扯到内存分配:想到了用new 关键字来处理. 2:数组的定义格式 区别: 动态初始化后数组中的每一个元素的内容都是其对应数据类型的默认值,随后可以通过下标进行数组内容的修改: 如果希望数组定义的时候就可以提供内容,则采用静态初始化的方式: a:数组的动态初始化(声明并初始化数组): 数据类型 数组名称

随机推荐